В самом первом утверждении:
[int] $Choice = -1
... вы вводите $choice
в [int]
.
Когда вы применяете приведение к левой стороне присваивания (слева от имени переменной), PowerShell "запомнит" его как ограничение типа и обработает переменная строгой типизации - PowerShell будет пытаться преобразовать все, что вы назначите $choice
, в [int]
.
Нажатие на клавишу ввода в приглашении без других вводимых данных приводит к Read-Host
возвращению пустой строки (например, ""
)
В логе преобразования c пустая строка обрабатывается как $null
и приведение $null
к [int]
приводит к значению 0
. Вы можете убедиться в этом, приведя пустую строку к [int]
напрямую:
PS C:\> [int]""
0
Вам, вероятно, следует проверить ввод с Read-Host
, прежде чем присваивать $Choice
, если вам явно требуется число:
$inputString = Read-Host
if($inputString -notmatch '^\d+$') {
Write-Host "Digits only please!"
continue
}