2017-10-09 3 views
0

私は実際の変数値で置き換えたい可変プレースホルダを作成したPowerShellテンプレートシステムを作成しています。 例:<%$myvar%>$myvarの値に置き換えてください。

値が$trueまたは$falseの場合、これをファイルに出力する方法を見つけるのが苦労しています。 回避策として、$trueを1で置き換え、$falseを0で置き換えますが、文字通り出力できるかどうかは疑問です。ここで

は、私のコードの一部です:

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 
    } 

はNB:あなたが興味を持っている場合あなたがmy profileで、このプロジェクトのリンクを見つけることができます。あなたの現在のアプローチと

+0

いただきました!「'$真」と間違っていますか? – 4c74356b41

+0

これはちょうどコードを破る... –

+0

文字列はどのようにコードを壊すことができますか? rofl – 4c74356b41

答えて

4

一つの問題は、trueまたはfalseの値を持つ文字列が10それはないだろうに置き換えられるだろうということですか?

また、値をすぐに文字列にキャストしているため、他の値もマングリングする可能性があります。

あなたがしたいかもしれないもの

値が[bool]であることを最初に確認され、その場合、その後、あなただけの文字列値に$を追加することができます。

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

これは答えた '$ true'の代わりに' true'を出力しました –

+0

oups申し訳ありません[string] castを削除するのを忘れないでください。せずに動作します。すばらしいです! –

+3

@LoïcMICHEL正規表現を '<%$(.*)%>'に変更することで、コードをさらに単純化することができるので、中間変数を使用して先頭の '$'を取り除かずに直接 '$ matches [1]'を使うことができます。 –