【问题标题】:Powershell $? in do until loop电源外壳 $?在做直到循环
【发布时间】:2019-08-29 22:10:49
【问题描述】:

我正在尝试使用 $? 在 PowerShell 中创建一个循环以加入 Windows 域,如果最后一个命令返回错误,它应该返回 false/true。

这是我得到的:

Add-Computer -DomainName "domainname.local" -Credential "admin"

$MaxAttempts = 0
do {
    if ($? -like "false" -and $MaxAttempts -lt 5) {
        $MaxAttempts += 1
        Write-Host "Attempt" $MaxAttempts "out of 5"
        Add-Computer -DomainName "domainname.local" -Credential "admin"
    } else {
        Write-Host "test"
    }

问题是当我在 do/until 循环之外有第一个命令时,即使我收到错误,它也会返回 true。 但是当我将此命令添加到 do/until 循环时,它会按预期返回 false,但这样我会运行该命令两次,这不是我想要的。

谁能给我解释一下这个魔法?

【问题讨论】:

    标签: windows powershell


    【解决方案1】:

    automatic variable $? 包含 true 或 false,具体取决于前面的 PowerShell 语句是否成功完成。检查循环内$? 的值之前的最后一个PowerShell 语句是$MaxAttempts = 0,这会将$? 的值更改为true(因为赋值操作成功),即使之前的Add-Computer 语句失败。

    我建议将你的循环调整为这样的:

    $MaxAttempts = 0
    do {
        Add-Computer -DomainName "domainname.local" -Credential "admin"
        $success = $?
        if (-not $success) {
            $MaxAttempts++
        }
    } until ($success -or $MaxAttempts -ge 5) {
    

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2014-11-23
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多