2016-03-29 27 views
5

Sebep Bunu yapıyorum

Bir dosyada belirteç belirlemeye çalışıyorum. belirteci içeriği dosyasında 1 satır olduğunu ve bazı sorunlarım var, bir bool değeri içine bu jetonu dönüştürmeye çalıştığınızda dize değeri test kodu

sadeleştirilmiş $token=$false

olduğunu bu. Bu yüzden test kodunu yazdım ve dizeyi bir boole değerine dönüştüremediğimi buldum.

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

Write-Host '$boolValue =' $boolValue 

Bu, aşağıdaki hata veriyor ... Gördüğünüz gibi, hata mesajı ile önerildiği üzere ben $false değerini kullanıyorum, ama bunu kabul etmiyor

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 

. Herhangi bir fikir?

+0

Ayrıca bkz. Http://stackoverflow.com/questions/27484682/safely-converting-string-to-bool-in-powershell –

cevap

6

PowerShell'de, normal çıkış karakteri backtick'tir. Normal dizeler enterpolasyonludur: $ sembolü PowerShell tarafından anlaşılmış ve ayrıştırılmıştır. İnterpolasyonu önlemek için $'dan kurtulmanız gerekir. Bu sizin için çalışması gerekir:

[String]$strValue = "`$false" 

genel bir şekilde bir mantıksal değere "$ true" veya "$ false" dönüştürmek için öncelikle $ lider damla gerekir: dönüştürmek Sonra

$strValue = $strValue.Substring(1) 

boolean:

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

Yorumlarınız adresinin kodu kullanarak, en kısa çözüm olacaktır:

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

Sorun bunun doğru olarak atamasıdır. Yanlış olmalı, çünkü bu dizenin okuduğu şeydir. Belki de işlemek için başka bir/else ifadesi eklemeliyim. Ama düşünmem gerekmezdi. –

+0

Boolean olarak "false" ayrıştırmayı denedim, ancak şans ve aynı sonuç yok. Bool yazdığım karmaşık bir tasarımda bir token için kullanılır. Yani tercih edilir. Aksi takdirde, sadece $ tokenInUse' yerine, '$ tokenInUse -eq 'false'' yazıp, döngüler için ve deyimlerinde birden çok ifade yazmak zorunda kalırdım. Kodumu olabildiğince temiz tutmaya çalışıyorum. –

+0

Not: tüm satır bu $ AD_Export_TokenFromConfigFile = Get-Content $ gibi görünüyor AD_Export_ConfigFile | % {If ($ _ -match "SearchUsersInfoInAD_ConfigToken =") {($ _ -replace '* SearchUsersInfoInAD_ConfigToken * =', '') Kesim()}} '. Bu, "$ true" veya "$ false" değerini bir dize olarak alır. Ben sadece bir boole atmaya çalışıyorum, ama her zaman doğru olarak atıyor ... –