Do/Until 循环询问两次

Do/Until loop asking twice

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

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次,但它只是write-host 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

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

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)

在循环中保存对Kürzel的调用结果,因此您不必再次调用它:

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