【发布时间】:2015-02-10 23:40:03
【问题描述】:
我发现了一个非常老的线程here 似乎可以回答这个问题,但是当我尝试实现代码时,我没有得到预期的变量扩展。基于此
$Arguments = '$foo (Notepad.exe) bar'
$foo = 'Foooooo'
$InitSB = {$ExecutionContext.SessionState.Applications.Clear(); $ExecutionContext.SessionState.Scripts.Clear(); Get-Command | %{$_.Visibility = 'Private'}}
$SafeStringEvalSB = {param($str) $str}
$job = Start-Job -Init $InitSB -ScriptBlock $SafeStringEvalSB -ArgumentList $Arguments
Wait-Job $job > $null
Receive-Job $job
我希望能找回 Foooooo (Notepad.exe) 栏
我在这里做错了什么? v2和更高版本之间有什么区别吗? 我确实使用 $ExecutionContext.InvokeCommand.ExpandString() 进行了这项工作,但这也允许执行任意代码,这是我试图避免的。最终,我有大量不同的字符串存储在 XML 中,字符串中散布着不同的变量排列,并且这些不同变量的实际值是在运行时分配的。我需要将这些值推送到许多可能出现的特定字符串中。因为有很多潜在的字符串和变量,我不能轻易使用简单的格式方法。所以最终我需要 $ExecutionContext.InvokeCommand.ExpandString() 的功能,但仅限于实际上只是扩展变量,没有其他代码执行。 非常感谢任何帮助。
【问题讨论】:
标签: variables powershell expansion