2017-03-03 43 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

相關問題