在PowerShell中测试计算机对象是否存在于Active Directory中。

3

我有一个问题,就是如何检查计算机对象是否存在于AD中。如果不存在,它应该进入“else”分支。

这是我的代码:

if (Get-ADComputer "$Computer") {
        Get-ADComputer $Computer | Set-ADComputer -Enabled $false
        Start-Sleep -s 2 
        Get-ADComputer $Computer | Move-ADObject -TargetPath $PathOU
        Start-Sleep -s 2 
} else {
    write-host "Example"
}

当输入的计算机不存在时,问题是,命令Get-ADComputer "$Computer"if语句中已经失败了,因此它从未到达else

我该如何避免这种情况?

提前感谢您的帮助。

2个回答

1
请使用 Try Catch 来替代:
try {
    Get-ADComputer $Computer | Set-ADComputer -Enabled $false
    Start-Sleep -s 2 
    Get-ADComputer $Computer | Move-ADObject -TargetPath $PathOU
    Start-Sleep -s 2 
catch {
    Write-Host "Example"
}

这可能不总是有效;您应该在 cmdlet 中添加“-ErrorAction Stop”。 - Avshalom
1
@Avshalom 在这种情况下并不是真的。AD命令产生管道终止错误总是。 - Santiago Squarzon

1
if块之前将Get-ADComputer添加到一个变量中以帮助处理。在使用该命令设置变量之前,根据以下示例将其设置为null。除此之外,更改if块以首先检查它是否不存在并运行该逻辑,然后再运行逻辑如果它存在的话。
$comp = "";
$comp = Try {Get-ADComputer "$Computer"} Catch {$false};

if (!$comp) {
    write-host "Example"
    } else {
        $comp | Set-ADComputer -Enabled $false
        Start-Sleep -s 2 
        $comp | Move-ADObject -TargetPath $PathOU
        Start-Sleep -s 2
    };

支援的資源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接