我编写了一个脚本来从文件目录中提取权限,以便我们可以审核对文件夹的访问。我只是想看看我们有哪些组没有用户,所以我编写了这个脚本来提取所有组名并从值中删除域名,以便它可以通过第二个脚本运行它,为我们更正 AD 组名如果它根本不正确,因为我们遇到了一个问题,由于某种原因,有些人回来时名称略有不同。问题是所有在权限中命名的 AD 用户都以错误的形式返回。我希望这些错误甚至不会出现在屏幕上,有没有办法做到这一点?如您所见,我一直在尝试几种不同的方法将它们通过管道传输到日志或 -ea 忽略选项,但它仍然在屏幕上显示错误。
$filelocationscsv = "C:\AD\Excel\File Share migration.csv"
$filelocationcsvcontents = Get-Content -LiteralPath $filelocationscsv
$AllFolders = @()
foreach ($location in $filelocationcsvcontents) {
$AllFolders += $location.Substring(0,$location.Length-1)
}
$outputfilelocation = "C:\AD\Excel\permissions.csv"
$Results = @()
$errResults = @()
Foreach ($i in $Allfolders) {
if (Test-Path $i){
Write-Host "Obtaining file permissions for $i."
$acl = (Get-Acl $i -Filter *).Access | select -ExpandProperty IdentityReference
foreach($Access in $acl) {
if ($Access.Value -notlike "BUILTIN\Administrators" -and $Access.Value -notlike "domain\Domain Admins" -and $Access.Value -notlike "CREATOR OWNER" -and $access.Value -notlike "NT AUTHORITY\SYSTEM" -and $access.Value -notlike "Everyone" -and $access.Value -notlike "BUILTIN\Users" -and $access.Value -notlike "s-1*") {
[string]$perm = $Access.Value.Split('\')[1]
if($checkgroup = Get-ADGroup $perm){
#try
#{
## if( $LASTEXITCODE -gt 0 ){
## # Handle the error here
## # This example writes to the error stream and throws a terminating error
## $errResults += $LASTEXITCODE
## Write-Error "Unable to ping server, ping returned" -EA Ignore
## }
$Properties = [ordered]@{'AD Group'=$perm}
$Results += New-Object -TypeName PSObject -Property $Properties
#}
#Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
#{
# Write-Verbose "$perm skipped." -Verbose
# #$ErrorMessage =
# #$FailedItem = $_.Exception.ItemName
# #$errResults += $ErrorMessage + $FailedItem
#}
}
}
}
}
else {
Write-Host "$i is not accessible"
}
}
$Results | select -Property 'AD Group' -Unique | Export-Csv $outputfilelocation -NoTypeInformation
值得注意的是,这些错误并没有阻止我的脚本运行它更多的美学功能以及我自己的学习机会。我可以照原样使用我的脚本,但我想让它看起来更干净,并学习如何更好地处理错误。