2017-10-09 86 views
0

我正在寫一個PowerShell模板系統,我爲其創建了一個我想用實際變量值替換的變量佔位符。 例如<%$myvar%>應替換爲$myvar值。

我正在努力找到一種方法來輸出此文件時,值爲$true$false。 作爲解決方法,我用0代替$true,1代替$false,但我想知道是否可以從字面輸出它們。

這裏是我的代碼的一部分:

Get-Content myfile.ps1 | %{ 
    if ($_ -match '<%(.*)%>') { #replace variable placeholder with actual value 
     $tag = $Matches[0] 
     Write-Verbose "found variable placeholder: $tag" 
     $variablename = $matches[1] -replace '^\$','' #remove $ char so we can use it in Get-Variable 
     Write-Verbose "variablename: $variablename" 
     [string]$newvalue = Get-Variable $variablename | 
          select -ExpandProperty value 
     if ($newvalue.ToLower() -eq "true") { 
      $newvalue = 1 
     } 
     if ($newvalue.ToLower() -eq "false") { 
      $newvalue = 0 
     } 
     Write-Verbose "new-value: $newvalue" 
     $newline = $_ -replace [Regex]::Escape($tag), $newvalue 
     $newline | Out-File newfile.ps1 -Append 
    } 

注意:如果你有興趣,你可以找到在my profile這個項目的鏈接。

+0

什麼錯「'$真」? – 4c74356b41

+0

這只是打破了代碼... –

+0

一個字符串如何破壞代碼? rofl – 4c74356b41

回答

4

您當前的方法存在的一個問題是,值爲truefalse的字符串將替換爲10不是嗎?

另請注意,您正在將值轉換爲字符串,這也可能會破壞其他值。

你可能想要做的是首先檢查該值是[bool],然後如果是這樣,你可以添加$字符串值:

$newvalue = Get-Variable $variablename -ValueOnly 
if ($newvalue -is [bool]) { 
    $newvalue = "`$$newvalue" 
} 
+0

希望這是它的答案輸出'true'而不是'$ true' –

+0

oups抱歉忘記刪除[字符串]強制轉換。沒有工作。大! –

+3

@LoïcMICHEL您可以通過將正則表達式更改爲'<%$(.*)%>'來進一步簡化代碼,以便直接使用'$ matches [1]'而不必使用中間變量並刪除前導'$'。 –

相關問題