Глядя на строку While
:
While ($first = (Read-Host "What is the first number?") -as [double])
Это будет вводить / продолжать тело цикла только тогда, когда входное значение уже удвоено, поскольку оно сворачивает приведение к double
как частьусловие цикла.Вы хотите ввести тело цикла на любом входе и только потом проверять, является ли оно двойным.По крайней мере, это то, что делает код bash:
While ($first = (Read-Host "What is the first number?")) {
if ( ($first -as [double]) -eq $null) { Write-Host "Please enter a numeric value." }
else { break }
}
Или вы можете продолжить использовать приведение как часть условия, отрицая все выражение, и, таким образом, избежать необходимости в неудобном break
:
While (-not ($first = (Read-Host "What is the first number?") -as [double])) {
Write-Host "Please enter a numeric value."
}