【问题标题】:Powershell mandatory bool always truePowershell 强制 bool 始终为真
【发布时间】:2013-01-18 18:48:10
【问题描述】:

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

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

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

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

编辑:

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

【问题讨论】:

    标签: powershell parameters casting


    【解决方案1】:

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

    59> [bool]'0'
    True
    
    60> [bool]'false'
    True
    
    61> [bool]'False'
    True
    
    62> [bool]'$false'
    True
    

    要获得“假”路径来执行,只需在系统提示您输入参数时按回车即可:

    63> [bool]''
    False
    

    【讨论】:

      【解决方案2】:

      为什么不直接使用 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
      

      【讨论】:

      • 这对我不起作用——我需要推出一个使用强制参数集合来控制应用程序行为的快捷方式。在我的帖子的原始版本中有一个注释。我会重新编辑它。
      • 我今天感觉有点傻,因为我无法理解这个问题:) switch 是一个强制的布尔值。您可以指定它,也可以不指定它,并且在脚本中您可以指定它的值。开关在我看来是完美的。有关概念验证,请参阅我的答案中更新的输出部分。
      • 脚本需要能够被调用——不管其他命令行参数已经在快捷方式上——并通过强制参数屏幕提示输入值。使用强制参数尝试您的脚本,不要在命令行中输入值。你会明白我在说什么。
      • 我知道我玩游戏有点晚了,但是为了完成我需要的,我必须将参数作为字符串接收并检查字符串 '$true' 和/或 '$错误的'。无论如何,这在我的场景中有效。
      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2015-12-05
      • 2019-02-01
      相关资源
      最近更新 更多