转换字符串值" $ false"到布尔变量

时间:2016-03-29 00:44:31

标签: powershell powershell-v3.0

原因我这样做

我试图在我拥有的文件中设置令牌。令牌的内容在文件中是1行,它的字符串值是$token=$false

简化为测试代码

当我尝试将此令牌转换为bool值时,我遇到了一些问题。所以我编写了测试代码,发现我无法将字符串转换为bool值。

[String]$strValue = "$false"
[Bool]$boolValue = $strValue

Write-Host '$boolValue =' $boolValue

这会出现以下错误......

Cannot convert value "System.String" to type "System.Boolean", parameters of this type only accept booleans or numbers, use $true, $false, 1 or 0 instead.
At :line:2 char:17
+   [Bool]$boolValue <<<<  = $strValue

正如您所看到的,我正在使用错误消息建议的$false值,但它不接受它。有什么想法吗?

1 个答案:

答案 0 :(得分:9)

在PowerShell中,通常的转义字符是反引号。内插正常字符串:PowerShell可以理解和解析$符号。您需要转义$以防止插值。这应该适合你:

[String]$strValue = "`$false"

转换&#34; $ true&#34;或&#34; $ false&#34;要以通用方式使用布尔值,必须首先删除前导$

$strValue = $strValue.Substring(1)

然后转换为布尔值:

[Boolean]$boolValue = [System.Convert]::ToBoolean($strValue)

使用评论中的代码,最短的解决方案是:

$AD_Export_TokenFromConfigFile =
   [System.Convert]::ToBoolean(Get-Content $AD_Export_ConfigFile
                               | % {
                                      If($_ -match "SearchUsersInfoInAD_ConfigToken=") {
                                          ($_ -replace '*SearchUsersInfoInAD_ConfigToken*=','').Trim()
                                      }
                                   }.Substring(1))