diff --git a/ps-aclreport.ps1 b/ps-aclreport.ps1 index 89ca39f..dd376b2 100644 --- a/ps-aclreport.ps1 +++ b/ps-aclreport.ps1 @@ -1,13 +1,31 @@ Import-Module ACLReportTools $WorkDir="$env:LOCALAPPDATA\ps-aclreport" +$SHARE="esphome" +$COMPUTER="localhost" +$Date=(Get-Date).ToString("yyyyMMddHHmmss") function createBaselineReport($Computer, $Share){ $ShareName="${Computer}-${Share}" - $Date=(Get-Date).ToString("yyyyMMddHHmmss") $BaselineName="Baseline_${ShareName}_${Date}" New-ACLShareReport -ComputerName $Computer -Include $Share -IncludeInherited | Export-ACLReport -Path "${Workdir}\${BaselineName}.acl" -Force } +function createCurrentReport($Computer, $Share){ + $ShareName="${Computer}-${Share}" + $Date=(Get-Date).ToString("yyyyMMddHHmmss") + $CurrentName="Current_${ShareName}_${Date}" + New-ACLShareReport -ComputerName $Computer -Include $Share -IncludeInherited | Export-ACLReport -Path "${Workdir}\${CurrentName}.acl" -Force +} + +function compareBaselineToCurrent(){ + $LastBaseline=(Get-ChildItem $WorkDir | Sort-Object LastWriteTime | Where-Object {$_.name -match "Baseline_${COMPUTER}-${SHARE}.*"} | Select-Object -last 1) + $Current=(Get-ChildItem $WorkDir | Sort-Object LastWriteTime | Where-Object {$_.name -match "Current_${COMPUTER}-${SHARE}.*"} | Select-Object -last 1) + $DiffReportName="DiffReport_${COMPUTER}-${SHARE}_${Date}.acr" + $BaselineImport=(Import-ACLReport -Path $LastBaseline.FullName) + New-Item -ItemType Directory -Path $WorkDir -Name "DiffReports" -Force -ErrorAction SilentlyContinue | Out-Null + Compare-ACLReports -Baseline $BaselineImport -ComputerName $COMPUTER -Include $SHARE | Export-ACLPermissionDiff -Path "$WorkDir\DiffReports\$DiffReportName" -Force -WarningAction SilentlyContinue +} + function pruneBaselineReports(){ $reg="([a-zA-Z]+_.*)_\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}\.acl" $ReportGroups=(Get-Childitem -Path $WorkDir) | Sort-Object -Property Name | Where-Object {$_.name -match "([a-zA-Z]+_.*)_\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}\.acl"} | Group-Object -Property {$Matches[1]} @@ -19,4 +37,22 @@ function pruneBaselineReports(){ } } } -pruneBaselineReports \ No newline at end of file +function pruneCurrentReports(){ + #Current to new Baseline and delete or just rename + $Current=(Get-ChildItem $WorkDir | Sort-Object LastWriteTime | Where-Object {$_.name -match "Current_${COMPUTER}-${SHARE}.*"} | Select-Object -last 1) + Rename-Item -Path $Current.FullName -NewName "Baseline_${COMPUTER}-${SHARE}_${Date}.acl" +} + +# If there's no baseline, create one, then die +if(!((Get-ChildItem $WorkDir) | Where-Object {$_.Name -match "Baseline_${COMPUTER}-${SHARE}.*"})){ + createBaselineReport $COMPUTER $SHARE + exit 0 +} +else { + createCurrentReport $COMPUTER $SHARE + compareBaselineToCurrent + #After comparing Current to Baseline + pruneCurrentReports + # Delete old Reports + pruneBaselineReports +}