是否可以在PowerShell中自定义$ string插值符号?

时间:2017-03-03 14:33:09

标签: powershell

我想将PowerShell与HTML内容一起使用,该内容使用一些AngularJS var,如$ scope,$ window或$ sce。

一种解决方案是仅针对某些变量转义所有$次出现,而不是针对 Powershell cannot expand this javascript content 中给出的解决方案的PowerShell变量。

另一种解决方案是在PowerShell中自定义$字符串插值符号:是否可能?

我搜索了,但似乎无法找到它。

2 个答案:

答案 0 :(得分:4)

对PowerShell变量使用不同的符号,例如,用%

包围它们
<script type="text/javascript">
    %var1%
    $jsvar
    $('.mylink').click(function(event) {
        var hash = $(this).attr("href");
    });
    %var2%
</script>

因此,您可以轻松逃脱所有JavaScript $,然后将%转换为PowerShell的$

$ExecutionContext.InvokeCommand.ExpandString((
     $text -replace '\$', '`$' -replace '%(\w+)%', '$$$1'))

答案 1 :(得分:2)

  

另一种解决方案是在Powershell中自定义$ string插值符号

我不知道这是可能的,但无论如何你可能不需要走那条路。

不确定这是否适合您,但您可以做的一个选项是允许PowerShell扩展它找到的所有字符串。但是,在此之前你要做的是事先做一些变量,这些变量会放在变量名本身的文本中。

$inputString = @'
There is some $data here.
It looks like we are getting $real $crazy.
Look at the colour $colour to see what is going on. 
'@

此字符串中有4个潜在变量。它是单引号,因此尚未进行扩展。我们创建了一组&#34;变量&#34;我们不想扩大。以及我们想要扩展的一个变量。我选择替换$colour

$skip = "data","real","crazy"
$colour = "Green"

然后我们在$skip中为每个字符串创建变量,其中数据是带有美元符号的变量名称。

$skip | ForEach-Object{New-Variable -Name $_ -Value "`$$_"}

所以现在当我们进行变量插值时,所有变量都会受到影响,但是我们控制了那些不应该改变它们的值的结果。

$ExecutionContext.InvokeCommand.ExpandString($inputString)
There is some $data here.
It looks like we are getting $real $crazy.
Look at the colour Green to see what is going on.

所以所有的字符串都被扩展了但是我们在数据中放置了相同的文本,真实和疯狂,$colour被允许更改。我看了你的另一个问题,除了已经告诉你的答案之外,这对子表达式没有多大帮助。

请注意,如果您不控制或信任正在插入的数据和源字符串本身,$ExecutionContext.InvokeCommand.ExpandString可能会很危险。那里存在潜在的恶意行为。