Powershell

為什麼我的 PowerShell 腳本在通過批處理 (.cmd) 文件在 PSEXEC 中呼叫時會掛起?

  • December 12, 2014

我正在嘗試使用遠端執行 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

引用自:https://serverfault.com/questions/135070