Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell强制布尔始终为真_Powershell_Parameters_Casting - Fatal编程技术网

Powershell强制布尔始终为真

Powershell强制布尔始终为真,powershell,parameters,casting,Powershell,Parameters,Casting,我有一个包含以下设置的脚本,如果我使用强制参数屏幕,该脚本将返回不正确的结果。感觉好像它没有对我的输入进行某种类型的类型验证或强制转换。我如何解决它 param ( [Parameter(Mandatory=$true)] [bool]$autoinstall ) if ( $autoinstall ) { echo "Autoinstall true" } else { echo "Autoinstall false" } 如果我使用.\myscript.ps1-aut

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

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

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}
如果我使用.\myscript.ps1-autoinstall$false调用它,这将非常有效,但是如果我使用强制密码提示并输入“$false”,则无论我传递什么,$autoinstall变量始终为true

编辑:


使用开关对我不起作用。我真的需要让它既可以编写脚本,又可以作为用户快捷方式的必需参数函数,以便在运行中使用。

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

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

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

59> [bool]'0'
True

60> [bool]'false'
True

61> [bool]'False'
True

62> [bool]'$false'
True
要获取要执行的“false”路径,当提示输入参数时,只需按enter键,即:

63> [bool]''
False

这对我不起作用-我需要推出一个使用强制参数集合来控制应用程序行为的单一快捷方式。在我帖子的原始版本中有这样一个注释。。我会重新编辑它。我今天觉得有点傻,因为我不明白这个问题:)开关是一个强制布尔值。您可以指定它,也可以不指定,并且可以在脚本中指定它的值。这个开关在我眼里是完美的。有关概念验证,请参见我的答案中的更新的输出部分。脚本需要能够被调用(无论快捷方式上已经存在的其他命令行参数如何),并通过强制参数屏幕提示输入值。使用开关的强制参数尝试脚本,不要在命令行中输入值。你会明白我在说什么。我知道我玩游戏有点晚了,但为了完成我需要的,我必须将参数作为字符串,并检查字符串“$true”和/或“$false”。无论如何,这在我的场景中是有效的。