Do/Until 循环询问两次

时间:2021-07-07 08:41:47

标签: powershell loops active-directory

此函数在一次正确行为后循环两次。我不知道为什么。

function Kürzel {
   $samaccountname = Read-Host -prompt "Kürzel eingeben"
   Get-ADUser -F {SamAccountName -eq $SamAccountName}
}

do { 
    if (Kürzel) {
        Write-Host "Kürzel schon vorhanden"
        Start-Sleep -s 1
    }
} until (-not(Kürzel)

这是结果。我故意把 samaccountname 弄错了 5 次,但它只写了 3 次主机。

Kürzel eingeben: pat
Kürzel schon vorhanden
Kürzel eingeben: pat
Kürzel eingeben: pat
Kürzel schon vorhanden
Kürzel eingeben: pat
Kürzel eingeben: pat
Kürzel schon vorhanden
Kürzel eingeben: cet

2 个答案:

答案 0 :(得分:1)

这是因为您在 Kürzelif 条件中调用了 until 函数。您可以通过引入一个变量并省略第二个函数调用来简单地解决这个问题:

function Kürzel {
    $samaccountname = Read-Host -prompt "Kürzel eingeben"
    Get-ADUser -F { SamAccountName -eq $SamAccountName }
}

$isUnique = $true


do { 
    if (Kürzel) {
        Write-Host "Kürzel schon vorhanden"
        $isUnique = $false
        Start-Sleep -s 1
    } else {
        $isUnique = $true
    }
} until ($isUnique)

答案 1 :(得分:1)

在循环内保存对 Kürzel 的调用结果,这样您就不必再次调用它:

do {
    $vorhandenerKonto = Kürzel
    if ($vorhandenerKonto) {
        Write-Host "Kürzel schon vorhanden"
        Start-Sleep -s 1
    }
} until (-not($vorhandenerKonto))
相关问题