Verwenden Sie die Skripte in diesem Abschnitt, um den Prozess zum Erstellen eines Auditberichts für Benutzer, die vordefinierten Rollen in einer Umgebung zugewiesen sind, zu automatisieren und den Bericht optional per E-Mail an einen Empfänger zu senden.
Dieser Auditbericht zeigt die Benutzer, die vordefinierten Rollen oder Gruppen zugewiesen sind, die seit der letzten Berichtsgenerierung geändert wurden. Um einen täglichen Auditbericht zu erstellen, führen Sie dieses Skript täglich aus.
Erstellen Sie provisioningAuditReport.bat
, indem Sie das folgende Skript kopieren. Dieses Wrapper-Batchskript ruft das PowerShell-Skript provisioningAuditReport.ps1
auf, dessen Quellcode später in diesem Szenario bereitgestellt wird.
Hinweis:
provisioningAuditReport.bat
: username
, password
oder password_file
, service_url
und report_email_to_address
(optional, nur erforderlich, wenn Sie den Bericht an eine E-Mail-Adresse senden möchten).@echo off set paramRequiredMessage=Syntax: provisioningAuditReport.bat USERNAME PASSWORD/PASSWORD_FILE URL [REPORT_EMAIL_TO_ADDRESS] if "%~1" == "" ( echo User Name is missing. echo %paramRequiredMessage% exit /b 1 ) if "%~2" == "" ( echo Password or Password_File is missing. echo %paramRequiredMessage% exit /b 1 ) if "%~3" == "" ( echo URL is missing. echo %paramRequiredMessage% exit /b 1 ) PowerShell.exe -File provisioningAuditReport.ps1 %*
provisioningAuditReport.bat
ruft das Skript provisioningAuditReport.ps1
auf, das Sie erstellen, indem Sie das folgende Skript kopieren.
provisioningAuditReport.ps1
erstellt den Auditbericht. Speichern Sie das Skript in demselben Verzeichnis, in dem sich provisioningAuditReport.bat
befindet.
$username=$args[0] $password=$args[1] $url=$args[2] $reportemailtoaddress=$args[3] $date=$(get-date -f dd_MM_yy_HH_mm_ss) $datedefaultformat=$(get-date) $logdir="./logs/" $logfile="$logdir/epmautomate-provisionauditreport-" + $date + ".log" $reportdir="./reports/" $provisionreport="provreport-audittest-" + $date + ".csv" $provisionreporttemp="./provreport-audittest-temp.csv" $provisionreportunique="./provreport-audittest-unique.csv" $provisionreportbaselineunique="./provreport-audittest-baseline-unique.csv" function EchoAndLogMessage { $message=$args[0] echo "$message" echo "$message" >> $logfile } function Init { $logdirexists=Test-Path $logdir if (!($logdirexists)) { mkdir $logdir 2>&1 | out-null } $logfileexists=Test-Path $logfile if ($logfileexists) { rm $logfile 2>&1 | out-null } $reportdirexists=Test-Path $reportdir if (!($reportdirexists)) { mkdir $reportdir 2>&1 | out-null } } function PostProcess { rm $provisionreporttemp mv -Force $provisionreportunique $provisionreportbaselineunique } function ProcessCommand { $op=$args echo "EPM Automate operation: epmautomate.bat $op" >> $logfile epmautomate.bat $op >> $logfile 2>&1 if ($LASTEXITCODE -ne 0) { echo "EPM Automate operation failed: epmautomate.bat $op. See $logfile for details." exit } } function RunEpmAutomateCommands { EchoAndLogMessage "Running EPM Automate commands to generate the provisioning report." ProcessCommand login $username $password $url ProcessCommand provisionreport $provisionreport ProcessCommand downloadfile $provisionreport ProcessCommand deletefile $provisionreport ProcessCommand logout } function CreateProvisionReportTempFile { # Loop through iteration csv file and parse Get-Content $provisionreport | ForEach-Object { $elements=$_.split(',') echo "$($elements[0]),$($elements[2])" >> $provisionreporttemp } } function CreateUniqueElementsFile { gc $provisionreporttemp | sort | get-unique > $provisionreportunique } function CheckBaselineAndCreateAuditReport { $provisionreportbaselineuniqueexists=Test-Path $provisionreportbaselineunique if (!($provisionreportbaselineuniqueexists)) { EchoAndLogMessage "No existing provisioning report, so comparison with a baseline is not possible. Audit report will be created at the next test run." } else { CreateAuditReport } } function EmailAuditReport { $auditreport=$args[0] $elements=$auditreport.split('/') $auditreportname=$elements[2] if (${reportemailtoaddress} -match "@") { EchoAndLogMessage "Emailing audit report" ProcessCommand login $username $password $url ProcessCommand uploadFile $auditreport ProcessCommand sendMail $reportemailtoaddress "Provisionining Audit Report" Body="Provisioning Audit Report is attached." Attachments=$auditreportname ProcessCommand deleteFile $auditreportname ProcessCommand logout } } function CreateAuditReport { $auditreport=$reportdir + "auditreport-"+ $date + ".txt" $additions = @() $deletions = @() EchoAndLogMessage "Comparing previous provisioning report with the current report." $compare=compare-object (get-content $provisionreportunique) (get-content $provisionreportbaselineunique) $compare | foreach { if ($_.sideindicator -eq '<=') { $additions += $_.inputobject } elseif ($_.sideindicator -eq '=>') { $deletions += $_.inputobject } } echo "Provisioning Audit Report for $datedefaultformat" > $auditreport echo "------------------------------------------------" >> $auditreport if ($additions.count -ne 0) { echo " " >> $auditreport echo "Additions:" >> $auditreport foreach($element in $additions) { echo "$element" >> $auditreport } } if ($deletions.count -ne 0) { echo " " >> $auditreport echo "Deletions:" >> $auditreport foreach($element in $deletions) { echo "$element" >> $auditreport } } if (($additions.count -eq 0) -and ($deletions.count -eq 0)) { echo " " >> $auditreport echo "No changes from last audit report." >> $auditreport } EchoAndLogMessage "Provisioning audit report has been generated: $auditreport." EmailAuditReport $auditreport } Init EchoAndLogMessage "Starting EPMAutomate provisioning audit reporting" RunEpmAutomateCommands CreateProvisionReportTempFile CreateUniqueElementsFile CheckBaselineAndCreateAuditReport PostProcess EchoAndLogMessage "EPMAutomate provisioning audit reporting completed"