Parsing Powershell中的动态字符串解析

Parsing Powershell中的动态字符串解析,parsing,powershell,Parsing,Powershell,我正在尝试用Powershell解析做一些不寻常的事情。基本上,我有一个包含变量名称的文本字符串。我想做的是告诉powershell“嘿,我有一个字符串(可能)包含一个或多个变量名——动态解析它,用它们的值替换变量名” 以下是我理解解析工作的教科书方式: PS C:\> $foo = "Rock on" PS C:\> $bar = "$foo" PS C:\> $bar Rock on 如果我现在更改$foo的值: PS C:\> $foo = "Rock off"

我正在尝试用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重新分析字符串


谢谢

$executionContext.InvokeCommand.ExpandString($bar)


我编写了一个ConvertToHereString函数,它的作用就是:

 $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.