2011-02-17 92 views
2

我試圖做一些與Powershell解析不同尋常的事情。基本上,我有一個包含變量名稱的文字字符串。我想要做的是告訴powershell「嗨,我有一個字符串(可能)包含一個或多個變量名稱 - 動態解析它,用它們的值替換變量名稱」PowerShell中的動態字符串解析

這裏是教科書的方式我明白解析作品:

PS C:\> $foo = "Rock on" 
PS C:\> $bar = "$foo" 
PS C:\> $bar 
Rock on 

如果我現在改變了價值$ foo的:

PS C:\> $foo = "Rock off" 
PS C:\> $bar 
Rock on 

沒有意外在這裏。 $ bar的值在分配時被解析,並且因爲$ foo的值改變而沒有改變。

好吧,那麼如果我們爲$ bar分配單引號會怎麼樣?

PS C:\> $foo = "Rock on" 
PS C:\> $bar = '$foo' 
PS C:\> $bar 
$foo 

這很好,但有沒有辦法讓Powershell按需解析它?例如:

PS C:\> $foo = "Rock on" 
PS C:\> $bar = '$foo' 
PS C:\> $bar 
$foo 
PS C:\> Some-ParseFunction $bar 
Rock on 
PS C:\> $foo = "Rock off" 
PS C:\> Some-ParseFunction $bar 
Rock off 

爲什麼我要這樣做?我希望能夠從一個文件(或數據源)獲取內容並動態解析它:

PS C:\> $foo = "Rock on" 
PS C:\> '$foo with your bad self.' | out-file message.txt 
PS C:\> $bar = (get-content message.txt) 
PS C:\> $bar 
$foo with your bad self. 
PS C:\> Some-ParseFunction $bar 
Rock on with your bad self. 

可以這樣做?我意識到我可以爲搜索/替換已知名稱做一些模式匹配,但我寧願讓Powershell重新分析字符串。

謝謝!

回答

0

我寫了的ConvertTo-herestring功能做到了這一點:

$foo = "Rock on" 
'$foo with your bad self.' | out-file message.txt 

function convertto-herestring { 
begin {$temp_h_string = '@"' + "`n"} 
process {$temp_h_string += $_ + "`n"} 
end { 
    $temp_h_string += '"@' 
    iex $temp_h_string 
    } 
} 

    gc message.txt | convertto-herestring 

    Rock on with your bad self.