我正在执行Powershell脚本以获取每个AD域控制器上的badpwdcount。大约有50个域控制器。运行脚本时,无法访问其中一台服务器。该脚本应记录失败的连接尝试并继续。但是,脚本在连接尝试失败后终止。
Param(
$BadOption,
$Samaccountname = "<accountname>"
)
Import-Module ActiveDirectory
$result = @()
try {
$DC = Get-ADDomainController -Filter * | select -exp hostname
$DC1 = $DC -notlike { "<DC Server>", "<DC Server1>" } # skipping few
foreach ($Domaincontroller in $DC1) {
$count = Get-ADUser -Identity $Samaccountname -Server $Domaincontroller -Properties badPwdCount | select badPwdCount
$result += $Domaincontroller + ',' + $count
}
#echo $result
}
catch {
$errmsg = $_.Exception.Message
$result += $Domaincontroller + ' :' + "Error : " + $errmsg
}
return $result发布于 2019-04-26 22:23:58
为什么不在循环中添加一个测试,以检查是否可以到达域控制器?
# An array of DC hostnames you want to exclude
$Exclude = "<DC Server>","<DC Server1>"
# By setting $ErrorActionPreference to Stop, PowerShell treats all non-terminating errors as terminating.
# This is useful when using try{..} catch{..} blocks.
$oldErrorAction = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
$result = @()
$DC = Get-ADDomainController -Filter * | Select-Object -ExpandProperty hostname | Where-Object { $Exclude -notcontains $_ }
foreach($Domaincontroller in $DC) {
if (Test-Connection -ComputerName $Domaincontroller -Count 1 -Quiet) {
try {
$count = (Get-ADUser -Identity $Samaccountname -Server $Domaincontroller -Properties badPwdCount).badPwdCount
$result += "$Domaincontroller, $count"
}
catch {
$errmsg = $_.Exception.Message
$result += "$Domaincontroller :Error : $errmsg"
}
}
else {
$result += "$Domaincontroller :Error : Failed connection attempt"
}
}
# Restore the previous value for the $ErrorActionPreference variable
$ErrorActionPreference = $oldErrorAction
$result发布于 2019-04-26 20:32:31
Continue语句应该允许您在终止Try-Catch块中的错误后继续处理。
$result = @()
$DC = Get-ADDomainController -Filter * | select -exp hostname
$DC1 = $DC -notlike {"<DC Server>","<DC Server1>"} # skipping few
foreach($Domaincontroller in $DC1)
{
try
{
$count = Get-ADUser -Identity $Samaccountname -Server $Domaincontroller -Properties badPwdCount | select badPwdCount
$result += $Domaincontroller + ',' + $count
}
catch {
$errmsg = $_.Exception.Message
$result += $Domaincontroller + ' :'+ "Error : "+$errmsg
Continue
}
}
$result发布于 2019-04-26 20:33:26
如下所示:
$result = @()
$DC = Get-ADDomainController -Filter * | select -exp hostname
$DC1 = $DC -notlike {"<DC Server>","<DC Server1>"} # skipping few
ForEach($Domaincontroller in $DC1) {
Write-Host $Domaincontroller
Try {
$count = Get-ADUser -Identity $Samaccountname -Server $Domaincontroller -Properties badPwdCount | select badPwdCount
$result += $Domaincontroller + ',' + $count
}
Catch{
$errmsg = $_.Exception.Message
$result += $Domaincontroller + ' :'+ "Error : "+$errmsg
}
}
Return $resulthttps://stackoverflow.com/questions/55867440
复制相似问题