Powershell обязательный bool всегда true

У меня есть скрипт, который включает следующие настройки, которые возвращают неправильный результат, если я использую экран обязательных параметров. Похоже, что он не может выполнить какую-то проверку типа или кастинг на моем входе. Как я могу это решить?

param ( [Parameter(Mandatory=$true)] [bool]$autoinstall )

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}

это отлично работает, если я вызываю его. myscript.ps1-autoinstall $false, но переменная $autoinstall всегда истинна независимо от того, что я передаю, если я использую обязательное приглашение пароля и введите "$false".

изменить:

использование переключателя не работает для меня. Мне действительно нужно, чтобы это было как сценарием, так и обязательной функцией параметров для ярлыков пользователей для использования на лету.

2 ответов


проблема возникает, потому что ввод интерпретируется как строка, и вы видите результаты принуждения PowerShell строки к bool, например:

59> [bool]'0'
True

60> [bool]'false'
True

61> [bool]'False'
True

62> [bool]'$false'
True

чтобы получить путь" false " для выполнения, просто нажмите enter, когда вам будет предложено ввести параметр, т. е.:

63> [bool]''
False

почему бы просто не использовать переключатель? Попробуйте это:

param ( [switch]$autoinstall )

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}

выход:

[20:40:46] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1
Autoinstall false
[20:42:36] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall
Autoinstall true
[20:42:38] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$true
Autoinstall true
[20:42:41] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$false
Autoinstall false