我正在爲供應商應用程序自動化修補程序。我想使用powershell遍歷服務器列表,並使用遠程處理在每個盒子上安裝。但是,一方面讓我很頭痛。我必須在執行安裝腳本之前調用供應商提供的cmd腳本來設置系統變量。因此,我調用腳本像這樣在PowerShell中:Powershell調用命令和系統變量
Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
我看到它執行,因爲它迴響在我的PowerShell窗口中工作,但隨後的安裝腳本調用即:
Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
立即退出說它使用的各種系統變量尚未設置。有人可以向我解釋系統變量的範圍嗎? invoke-command完成後它們是否停止存在?我是否需要將單個invoke-command中的兩個腳本調用串在一起,以便第二個腳本可以訪問系統變量或類似的東西?
也許我失去了一些東西,但不應該如下回顯1的值: Invoke-Command -session $ session {cmd/k「set myvar = 1」'&「echo%myvar%」} 它不產生ou tput的。 – 2012-07-29 15:27:09
讀取命令時(在命令中設置之前)會發生變量擴展。要延遲變量的擴展,請在調用cmd.exe時添加/ v開關並使用!而不是%:Invoke-Command -session $ session {cmd/v/k「set mytar = 2&echo!mytar!」} – 2012-07-29 16:31:05
謝謝你們的例子和清楚的解釋。我能夠完成我正在從事的工作。 – 2012-07-29 20:38:44