首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Catch -阻塞整个循环

Catch -阻塞整个循环
EN

Stack Overflow用户
提问于 2019-04-26 20:15:52
回答 3查看 94关注 0票数 0

我正在执行Powershell脚本以获取每个AD域控制器上的badpwdcount。大约有50个域控制器。运行脚本时,无法访问其中一台服务器。该脚本应记录失败的连接尝试并继续。但是,脚本在连接尝试失败后终止。

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-26 22:23:58

为什么不在循环中添加一个测试,以检查是否可以到达域控制器?

代码语言:javascript
复制
# 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
票数 1
EN

Stack Overflow用户

发布于 2019-04-26 20:32:31

Continue语句应该允许您在终止Try-Catch块中的错误后继续处理。

代码语言:javascript
复制
$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
票数 1
EN

Stack Overflow用户

发布于 2019-04-26 20:33:26

如下所示:

代码语言:javascript
复制
$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 $result
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55867440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档