a
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
# Get the report names from the files in the Module folder
|
||||
function Get-Reports {
|
||||
# Get the path to the module
|
||||
$atapFile = (Get-Module -ListAvailable ATAPAuditor).Path
|
||||
if ($atapFile.Count -gt 1) {
|
||||
$atapFile = $atapFile[0] # use the first result if there are several
|
||||
} elseif ($atapFile.Count -eq 0) {
|
||||
Write-Host "The ATAP module could not be found."
|
||||
pressAnyKeyToQuit
|
||||
Exit
|
||||
}
|
||||
|
||||
# find all *.ps1 report files
|
||||
$atapDir = Split-Path -parent $atapFile
|
||||
$reportsDir = Join-Path -Path $atapDir -ChildPath "Reports"
|
||||
$reportFiles = Get-ChildItem -Path "$reportsDir\*.ps1" -Recurse
|
||||
|
||||
# Build a dictionary from the file names without the extension
|
||||
$i = 1
|
||||
$reports = [ordered]@{}
|
||||
foreach ($reportName in $reportFiles) {
|
||||
$reports.add([string]$i, $reportName.BaseName)
|
||||
$i++
|
||||
}
|
||||
return $reports
|
||||
}
|
||||
|
||||
# present a menu based on the dict given as argument
|
||||
function Show-Menu {
|
||||
param (
|
||||
[System.Collections.Specialized.OrderedDictionary]$reports
|
||||
)
|
||||
Clear-Host
|
||||
Write-Host "============== AuditTAP Reports ==============`n"
|
||||
$padCount = ([string]$reports.Count).Length
|
||||
foreach ($item in $reports.GetEnumerator()) {
|
||||
Write-Host (' {0}: {1}' -f $item.Key.PadLeft($padCount, ' '), $item.Value)
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
|
||||
function askSelection {
|
||||
param (
|
||||
[System.Collections.Specialized.OrderedDictionary]$reports
|
||||
)
|
||||
$retry = $false
|
||||
:loop while ($true) {
|
||||
# show menu and ask the user for a selection (or multiple)
|
||||
Show-Menu $reports
|
||||
if ($retry) {
|
||||
[string]$selection = Read-Host "Invalid selection. Please try again`nYou can select multiple reports by comma separating the numbers"
|
||||
} else {
|
||||
[string]$selection = Read-Host "Please choose a report to run`nYou can select multiple reports by comma separating the numbers"
|
||||
}
|
||||
|
||||
# sanitize input data
|
||||
$selection = $selection -replace '\s',''
|
||||
$selection = $selection.Trim(',')
|
||||
$selectionArray = $selection.Split(",")
|
||||
$selectionArray = $selectionArray | Select-Object -Unique
|
||||
|
||||
# Check if requested reports are valid / actually present
|
||||
$reportsValid = @()
|
||||
foreach ($i in $selectionArray) {
|
||||
if (!$reports.Contains($i)) {
|
||||
Write-Host "Report $i does not exist"
|
||||
$retry = $true
|
||||
Continue loop
|
||||
} else {
|
||||
$reportsValid += $reports[$i]
|
||||
}
|
||||
}
|
||||
|
||||
# return the list of valid reports as an array of strings
|
||||
return $reportsValid
|
||||
}
|
||||
}
|
||||
|
||||
function runReports {
|
||||
param (
|
||||
[string[]]$report
|
||||
)
|
||||
Clear-Host
|
||||
Import-Module -Name ATAPAuditor -Force
|
||||
foreach ($i in $report) {
|
||||
Write-Host "Running report: $i"
|
||||
Save-ATAPHtmlReport -ReportName $i -Force
|
||||
Write-Host ""
|
||||
}
|
||||
}
|
||||
|
||||
function isAdmin {
|
||||
$unixOS = [System.Environment]::OSVersion.Platform -eq 'Unix'
|
||||
if ($unixOS) {
|
||||
return ($(id -u) -eq 0)
|
||||
} else {
|
||||
return ([Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544')
|
||||
}
|
||||
}
|
||||
|
||||
function pressAnyKeyToQuit {
|
||||
if ($psISE) {
|
||||
Return
|
||||
}
|
||||
Write-Host "Press any key to quit"
|
||||
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
||||
}
|
||||
|
||||
if (!(isAdmin)) {
|
||||
Write-Host "Please run as administrator`n"
|
||||
pressAnyKeyToQuit
|
||||
} else {
|
||||
$reports = Get-Reports
|
||||
Show-Menu $reports
|
||||
$sel = askSelection $reports
|
||||
runReports $sel
|
||||
|
||||
if ([System.Environment]::OSVersion.Platform -eq 'Unix') {
|
||||
if (($env:XDG_SESSION_TYPE -eq 'tty') -or ($null -eq $env:SUDO_USER)) {
|
||||
# 1. reason to return: no graphical environment to open the file explorer
|
||||
# 2. reason to return: we do not want to open the file explorer as root
|
||||
Return
|
||||
}
|
||||
}
|
||||
|
||||
[string]$action = Read-Host "Do you want to open the output directory? (Y/N)"
|
||||
if ($action -eq 'y' -or $action -eq 'Y') {
|
||||
if ($null -eq $env:ATAPReportPath) {
|
||||
$outPath = [Environment]::GetFolderPath('MyDocuments') | Join-Path -ChildPath 'ATAPReports'
|
||||
} else {
|
||||
$outPath = $env:ATAPReportPath
|
||||
}
|
||||
if (Test-Path -Path $outPath) {
|
||||
if ([System.Environment]::OSVersion.Platform -eq 'Unix') {
|
||||
su $env:SUDO_USER -c "xdg-open $outPath"
|
||||
} else {
|
||||
explorer.exe $outPath
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user