2016-03-29 6 views
5

Grund boolean Ich tue das

Ich versuche, ein Token in einer Datei gesetzt ich habe. Der Inhalt des Tokens ist 1 Zeile in der Datei, und es ist String-Wert $token=$false

zu Testcode Vereinfachtes ist

Wenn ich versuche, dieses Token in einen bool-Wert zu konvertieren, ich Probleme habe. Also habe ich Testcode geschrieben und festgestellt, dass ich die Zeichenfolge nicht in einen Bool-Wert konvertieren kann.

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

Write-Host '$boolValue =' $boolValue 

Dies gibt die folgende Fehlermeldung ...

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 

Wie Sie sehen können, habe ich den $false Wert verwenden wie sie in der Fehlermeldung vorgeschlagen wird, aber es ist zu akzeptieren es nicht. Irgendwelche Ideen?

+0

Siehe auch http://stackoverflow.com/questions/27484682/safely-converting-string-to-bool-in-powershell –

Antwort

6

In PowerShell ist das übliche Escape-Zeichen der Backtick. Normale Zeichenfolgen werden interpoliert: Das Symbol $ wird von PowerShell verstanden und analysiert. Sie müssen der $ entkommen, um eine Interpolation zu verhindern. Dies sollte für Sie arbeiten:

[String]$strValue = "`$false" 

auf eine boolean in allgemeiner Weise "$ true" oder "$ false" zu konvertieren, müssen Sie zuerst die führende $ fallen:

$strValue = $strValue.Substring(1) 

Dann konvertieren boolean:

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

Code aus Ihrem Kommentar verwenden, wäre die kürzeste Lösung sein:

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

Problem ist, dass es als wahr zuweisen. Es sollte falsch sein, denn das ist, was die Zeichenfolge liest. Vielleicht sollte ich einfach eine andere if/else-Anweisung hinzufügen, um damit umzugehen. Aber ich würde denken, dass ich nicht müsste. –

+0

Ich habe versucht, "falsch" als Boolean zu analysieren, aber kein Glück und dasselbe Ergebnis. Der Bool wird für ein Token in einem komplexen Design verwendet, das ich schreibe. So ist es bevorzugt. Sonst müsste ich statt "$ tokenInUse" in mehreren if-Anweisungen, for und while-Schleifen '$ tokenInUse -eq 'false' schreiben. Ich versuche, meinen Code so sauber wie möglich zu halten. –

+0

Hinweis: Die gesamte Zeile sieht folgendermaßen aus: $ AD_Export_TokenFromConfigFile = Get-Content $ AD_Export_ConfigFile | % {If ($ _ -match "SearchUsersInfoInAD_ConfigToken =") {($ _ -replace '* SearchUsersInfoInAD_ConfigToken * =', ''). Trimmen()}} '. Dies erhält den Wert von $ True oder $ false als String. Ich versuche nur, es zu einem bool zu werfen, aber es wirkt immer so wahr ... –