Utilice los scripts de esta sección para automatizar el proceso de creación de un informe de auditoría para usuarios asignados a roles predefinidos en un entorno y, opcionalmente, enviarlo por correo electrónico a un destinatario.
En este informe de auditoría se muestran los usuarios asignados a roles o grupos predefinidos que hayan cambiado desde la última vez que se generó el informe. Para crear un informe de auditoría diario, ejecute este script a diario.
Cree provisioningAuditReport.bat
copiando el siguiente script. Este script por lotes de envoltorio llama al script PowerShell provisioningAuditReport.ps1
, el código de origen para el que se proporciona más adelante en este escenario.
Nota:
provisioningAuditReport.bat
son: username
, password
o password_file
, service_url
y report_email_to_address
(opcional, solo necesario si desea enviar el informe a una dirección de correo electrónico).@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
llama a provisioningAuditReport.ps1
, que se crea copiando el siguiente script.
Con provisioningAuditReport.ps1
se crea el informe de auditoría. Colóquelo en el mismo directorio en el que se encuentra 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"