為什麼我的 PowerShell 腳本在通過批處理 (.cmd) 文件在 PSEXEC 中呼叫時會掛起?
我正在嘗試使用遠端執行 PowerShell 腳本
PSEXEC
。通過.cmd
批處理文件呼叫 PowerShell 腳本。我們這樣做的原因是更改執行策略,執行 powershell 腳本然後再次重置執行策略:在遠端伺服器上
do-tasks.cmd
看起來像:powershell -command "&{ set-executionpolicy unrestricted}" powershell DoTasks.ps1 powershell -command "&{ set-executionpolicy restricted}"
PowerShell 腳本
DoTasks.ps1
現在只是這樣做:Write-Output "Hello World!"
這兩個腳本都存在
c:\windows\system32
(現在),所以它們在 PATH 上。在原始伺服器上,我這樣做:
psexec \\web1928 -u administrator -p "adminpassword" do-tasks.cmd
當它執行時,我在命令行得到以下響應:
c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}"
並且腳本不再執行。
我不能按 ctrl-c 來破壞腳本,我只看到 ^C 字元,我可以從鍵盤輸入輸入,這些字元會回顯到控制台。
在遠端伺服器上,我看到 PowerShell.exe 和 CMD.exe 正在任務管理器的程序選項卡中執行。如果我結束這些程序,則控制返回到原始伺服器上的命令行。
我已經用一個簡單的
.cmd
批處理文件嘗試了這個@echo hello world
,它工作得很好。
do-tasks.cmd
通過 RDP 會話在遠端伺服器上執行也可以。源伺服器執行 Windows 2003 SP2,遠端伺服器執行 Windows 2008 SP2。
為什麼我的遠端批處理文件在執行時卡住了
PSEXEC
?
由於伺服器執行的是 2k8,我懷疑 UAC 會導致問題。我還建議使用 winrm 而不是 psexec。Powershell 遠端處理是 powershell 2.0 的最佳新功能之一
這是 POSH 的常見問題。問題是
stdin
掛起。嘗試這個:c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}" < NUL