2017-03-03 59 views
0

我想使用PowerShell与使用一些angularhs变种如$范围,$窗口,$ SCE

一种解决方案是逃避所有$ OCCURENCES仅用于某些变量而不是PowerShell的变量解决这里给出 HTML内容Powershell cannot expand this javascript content

另一种解决方案是在Powershell中自定义$ string插值符号:是否有可能?我搜索,但似乎无法找到它。

+0

所以你有一个字符串,你希望它扩展一些变量,但不是其他的。 – Matt

+0

@Matt是的,就是这样 – user310291

+0

你打算如何扩展变量? – Matt

回答

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')) 
+0

当我尝试使用app.controller('Ctrl',函数($ scope,$ window,$ sce){}时,我得到一个空的输出文件? – user310291

+0

$ template = get-content -raw -Encoding utf8 test.html $ Template = $ Template | ForEach-Object {ExecuteContext.InvokeCommand.ExpandString(($ text -replace'\ $','''-replace'%(\ w +)%','$$$ 1') ) } } $ Template | Out-File out.html -Encoding UTF8 – user310291

+0

由于您没有使用'foreach'中的实际文件内容:''_'替换'$ text' – wOxxOm

2

另一种解决方案是定制$串插符号在PowerShell中

我不知道那是可能的,但你可能不需要反正走这条路。

不知道这是否对您来说是可行的解决方案,但您可以做的一个选择是允许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个潜在变量。它是单引号的,所以没有扩展发生。我们创建了一个我们不想扩展的“变量”集合。以及我们想要扩展的一个变量。我选择来取代$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可能很危险。那里存在潜在的恶意行为。

+0

似乎是一个很好的解决方案,我选择了第一个,因为它是更快的实施,但将在 – user310291

+0

后尝试你的矿是基于_this_问题的答案。它并不真正适用于你真正要问的是什么是关于另一个问题的内容。如果包含这些,我不会用这种方式回答。我希望这对其他人有用,这就是为什么我保留在这里。 – Matt