2016-03-29 11 views
5

कारण मैं इस

कर रहा हूँ मैं एक फ़ाइल मैं में एक टोकन स्थापित करने के लिए कोशिश कर रहा हूँ "झूठे $"। टोकन की सामग्री फ़ाइल में 1 लाइन है, और यह स्ट्रिंग मान $token=$falseConvert स्ट्रिंग मान बूलियन चर

परीक्षण कोड

को सरलीकृत है जब मैं एक 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 मूल्य उपयोग कर रहा हूँ के रूप में त्रुटि संदेश ने सुझाव दिया है, लेकिन यह इसे स्वीकार नहीं कर रहा है। कोई विचार?

+0

यह भी देखें http://stackoverflow.com/questions/27484682/safely-converting-string-to-bool-in-powershell –

उत्तर

6

पावरशेल में, सामान्य बचने वाला चरित्र बैकटिक है। सामान्य तारों को अलग किया जाता है: $ प्रतीक पावरशेल द्वारा समझा और पार्स किया जाता है। इंटरपोलेशन को रोकने के लिए आपको $ से बचने की आवश्यकता है। यह आप के लिए काम करना चाहिए:

[String]$strValue = "`$false" 

एक बूलियन में बदलने के लिए एक सामान्य तरीके "$ सही" या "$ false", तो आपको पहले प्रमुख $ ड्रॉप करना होगा:

$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)) 
+0

समस्या यह है कि यह इसे सत्य के रूप में असाइन कर रही है। यह गलत होना चाहिए क्योंकि स्ट्रिंग के रूप में यही पढ़ता है। हो सकता है कि मुझे इसे संभालने के लिए बस एक और कथन जोड़ना चाहिए। लेकिन मुझे लगता है कि मुझे नहीं करना पड़ेगा। –

+0

मैंने एक बुलियन के रूप में "झूठी" पार्सिंग करने की कोशिश की, लेकिन कोई भाग्य और एक ही परिणाम नहीं। एक जटिल डिजाइन में एक टोकन के लिए बूल का उपयोग किया जाता है जिसे मैं लिख रहा हूं। तो यह पसंद किया जाता है। अन्यथा केवल '$ tokenInUse' कहने के बजाय, मुझे ब्योरे के लिए, और समय के दौरान, एकाधिक में' $ tokenInUse -eq 'false' लिखना होगा। मैं अपना कोड जितना संभव हो उतना साफ रखने की कोशिश करता हूं। –

+0

नोट: पूरी लाइन इस '$ AD_Export_TokenFromConfigFile = Get-Content $ AD_Export_ConfigFile की तरह दिखती है। % {अगर ($ _ -match "SearchUsersInfoInAD_ConfigToken =") {($ _ -replace '* SearchUsersInfoInAD_ConfigToken * =', '')। Trim()}} '। यह स्ट्रिंग के रूप में '$ true' या '$ false' का मान प्राप्त करता है। मैं बस इसे एक बूल में डालने की कोशिश कर रहा हूं, लेकिन यह हमेशा सत्य के रूप में रहता है ... –

संबंधित मुद्दे