9

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

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

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

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

编辑:

使用开关对我不起作用。我真的需要让它既可编写脚本又是用户快捷方式的强制参数函数,以便即时使用。

4

2 回答 2

10

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

59> [bool]'0'
True

60> [bool]'false'
True

61> [bool]'False'
True

62> [bool]'$false'
True

要获得“假”路径来执行,只需在提示您输入参数时按 Enter 键,即:

63> [bool]''
False
于 2013-01-18T21:08:30.853 回答
7

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

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
于 2013-01-18T18:59:04.720 回答