我想将PowerShell与HTML内容一起使用,该内容使用一些AngularJS var,如$ scope,$ window或$ sce。
一种解决方案是仅针对某些变量转义所有$
次出现,而不是针对 Powershell cannot expand this javascript content 中给出的解决方案的PowerShell变量。
另一种解决方案是在PowerShell中自定义$
字符串插值符号:是否可能?
我搜索了,但似乎无法找到它。
答案 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
可能会很危险。那里存在潜在的恶意行为。