Powershell强制性布尔总是如此

Tim*_*ham 8 parameters powershell casting

我有一个脚本,其中包含以下设置,如果我使用强制参数屏幕,则会返回不正确的结果.感觉它没有在我的输入上进行某种类型验证或投射.我该如何解决?

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

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}
Run Code Online (Sandbox Code Playgroud)

如果我使用.\ myscript.ps1 -autoinstall $ false调用它,这非常有效,但是如果我使用强制密码提示并输入'$ false',则无论我通过什么,$ autoinstall变量始终为true.

编辑:

使用开关对我不起作用.我真的需要这个可编写脚本和强制参数函数用于即时使用的用户快捷方式.

Kei*_*ill 9

出现此问题是因为输入被解释为字符串,并且您看到PowerShell将字符串强制为bool的结果,例如:

59> [bool]'0'
True

60> [bool]'false'
True

61> [bool]'False'
True

62> [bool]'$false'
True
Run Code Online (Sandbox Code Playgroud)

要获得执行的"错误"路径,只需在提示输入参数时按Enter键即:

63> [bool]''
False
Run Code Online (Sandbox Code Playgroud)


Fro*_* F. 5

为什么不使用开关?试试这个:

param ( [switch]$autoinstall )

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}
Run Code Online (Sandbox Code Playgroud)

输出:

[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
Run Code Online (Sandbox Code Playgroud)