gpt4 book ai didi

powershell - 在Powershell脚本中捕获错误

转载 作者:行者123 更新时间:2023-12-03 08:16:46 24 4
gpt4 key购买 nike

我编写了一个脚本来从文件目录中提取权限,以便我们可以审核对文件夹的访问。我只想查看哪些组没有用户,所以我编写了此脚本以提取所有组名并从值中删除域名,以便随后可以通过第二个为我们更正AD组名的脚本运行它如果它完全不正确,因为我们遇到了一个问题,由于某种原因,有些人回来的名字略有不同。问题是所有在权限中命名的AD用户都会作为错误返回。我希望这些错误甚至不会显示在屏幕上,有没有办法做到这一点?如您所见,我一直在尝试几种不同的方式将它们传送到日志或-ea ignore选项,但是它仍然在屏幕上显示错误。

$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
值得一提的是,这些错误并不能阻止我的脚本运行更多的美学功能以及对自己的学习机会。我可以按原样使用我的脚本,但我希望使其看起来更整洁并学习如何更好地处理错误。

最佳答案

当你
表示您有兴趣了解有关错误处理的更多信息,本周我学到的一件事是这些错误处理和记录的常用参数:

-ErrorAction
-WarningAction
-ErrorVariable
-WarningVariable
您可以使用参数 -ErrorAction SilentlyContinue消除错误消息,但使用参数 -ErrorVariable捕获错误
EXAMPLE: get-adgroup -ErrorAction SilentlyContinue -ErrorVariable MyErrors
您可以通过调用 $MyErrors来读取和处理错误
警告的工作方式相同
它可能会替代 Try/Catch

关于powershell - 在Powershell脚本中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65738164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com