Utilisez les scripts de cette section afin d'automatiser le processus de création d'un rapport d'audit pour les utilisateurs affectés à des rôles prédéfinis dans un environnement, et éventuellement afin d'envoyer le rapport par courriel à un destinataire.
Ce rapport d'audit présente les utilisateurs affectés à des groupes ou rôles prédéfinis qui ont été modifiés depuis la dernière génération du rapport. Pour créer un rapport d'audit quotidien, exécutez ce script tous les jours.
Créez provisioningAuditReport.bat
en copiant le script suivant. Ce script de lot d'enveloppe appelle le script de PowerShell provisioningAuditReport.ps1
, le code source qui est fourni plus loin dans ce scénario.
Remarque :
provisioningAuditReport.bat
sont les suivants : username
, password
ou password_file
, service_url
et report_email_to_address
(facultatif ; requis uniquement si vous voulez envoyer le rapport par courriel).@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
appelle provisioningAuditReport.ps1
, que vous créez en copiant le script suivant.
provisioningAuditReport.ps1
crée le rapport d'audit. Placez-le dans le même répertoire que provisioningAuditReport.bat
.
$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"