gpt4 book ai didi

windows - 动力外壳 $?在做直到循环

转载 作者:可可西里 更新时间:2023-11-01 11:41:51 25 4
gpt4 key购买 nike

我正在尝试使用 $? 在 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,但那样我会运行该命令两次,这不是我想要的。

有人能给我解释一下这个魔法吗?

最佳答案

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) {

关于windows - 动力外壳 $?在做直到循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57706238/

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