我正在尝试使用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 :(得分:4)
$ executionContext.InvokeCommand.ExpandString($巴)
答案 1 :(得分: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.