2010-10-22 57 views
1

我需要在需要提升權限的幾臺Windows 2008服務器上完成一系列任務,因此我必須創建一系列計劃任務,我正在通過psexec運行。由於它們必須按順序運行,因此我找到並修改了一個「停頓」的powershell腳本,直到在遠程計算機上完成預定任務。我遇到的問題是,當我在遠程機器上使用psexec啓動腳本時,一旦它完成運行(由控制檯輸出中的消息指示),PowerShell.exe不會乾淨地退出,而是掛起並保持整個處理。在延遲腳本退出後,我需要powershell退出,但即使使用退出關鍵字,它仍會保留在內存中,並阻止該進程完成。我並不十分PowerShell的經歷,所以我會附上我的腳本的情況下,我在做一些愚蠢的事情在裏面:由PSExec觸發的Windows powershell腳本在運行完成時不會終止Powershell進程

while($true) { 
$status = schtasks /query /tn "AutoDeploy"| select-string -patt "AutoDeploy" 
if($status.tostring().substring(64,7) -eq "Running") { "Waiting for task to complete..." } else { break } 
start-sleep -s 5 
} 
"Task complete." 
exit 

預先感謝任何見解。

回答

1

這對我的作品(使用不同的任務名稱),不掛PSEXEC:

$taskName = "AutoDeploy" 
while (1) 
{ 
    $stat = schtasks /query /tn $taskName | 
       Select-String "$taskName.*?\s(\w+)\s*$" | 
       Foreach {$_.Matches[0].Groups[1].value} 
    if ($stat -ne 'Running') 
    { 
     "Task completed" 
     break 
    } 
    "Waiting for task to complete" 
    Start-Sleep 5 
} 
+0

雖然這並沒有解決我的具體問題,這是一個更優雅的解決方案,我執行到位我的。 – 2010-10-25 19:29:47

+0

我在通過SSH運行一些PowerShell腳本時遇到了一些麻煩,PowerShell在完成最後一個命令(但僅限於某些腳本)後會掛起。我通過將powershell.exe的stdin掛到nul來解決這個問題。所以有些東西等着stdin,但我不知道是什麼。 – JasonMArcher 2010-10-26 03:05:48

+0

由於遠程執行powershell都在我們網絡的上下文中,我可以遠程查詢計劃任務的狀態,所以我發現在本地運行腳本而不是通過psexec運行腳本會產生更加一致和可靠的輸出。這效果更好,所以我猜psexec正在期待什麼。 – 2010-10-26 13:12:55