在PowerShell中安全地将字符串转换为bool

Sha*_*dog 11 powershell boolean tryparse

我正在尝试将PowerShell脚本的参数转换为布尔值.这条线

[System.Convert]::ToBoolean($a)
Run Code Online (Sandbox Code Playgroud)

只要我使用诸如"true"或"false"的有效值,就可以正常工作,但是当传递无效值(例如"bla"或"")时,将返回错误.我需要类似于TryParse的东西,如果输入值无效则将值设置为false并返回指示转换成功或失败的布尔值.为了记录,我尝试了[boolean] :: TryParse和[bool] :: TryParse,PowerShell似乎没有认出它.

现在我不得不通过两个额外的if语句来笨拙地处理这个问题.

让我感到惊讶的是,到目前为止我发现的任何方法和博客文章都没有处理无效的值.我是否遗漏了一些东西,或者PowerShell孩子对于输入验证来说太酷了?

arc*_*444 17

你可以使用try/catch块:

$a = "bla"
try {
  $result = [System.Convert]::ToBoolean($a) 
} catch [FormatException] {
  $result = $false
}
Run Code Online (Sandbox Code Playgroud)

得到:

> $result
False
Run Code Online (Sandbox Code Playgroud)


Mik*_*ray 11

TryParse只要你使用ref并首先声明变量就应该工作:

$out = $null
if ([bool]::TryParse($a, [ref]$out)) {
    # parsed to a boolean
    Write-Host "Value: $out"
} else {
    Write-Host "Input is not boolean: $a"
}
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是最好的解决方案。不需要 try/catch 块。 (2认同)

mjo*_*nor 6

$a = 'bla'
$a = ($a -eq [bool]::TrueString).tostring()
$a

False
Run Code Online (Sandbox Code Playgroud)