2017-06-19 116 views
1

我正在使用PowerShell遠程進程,似乎幾分鐘後不留痕跡被殺死。遠程進程被殺神祕

我使用的命令如下:

$command = {Start-Process -NoNewWindow -Wait -FilePath $filepath -ArgumentList $args} 
Invoke-Command -Session $MyPSSession -ScriptBlock $command 

雖然遠程desktopping機器,我看任務管理器:這個過程是在列表中,並採取儘可能多的內存和CPU資源,像往常一樣(即,如果我直接在機器上執行相同的命令而不是使用Invoke-Command),但是在3到6分鐘後,過程停止,沒有任何痕跡。

是否有某種方式來防止這種行爲?我的流程應該平均運行很長時間(超過10分鐘),無論如何它會被殺死。

編輯1:好吧,我用procmon調試了這個問題,它好像就在臨死前一樣,進程啓動了退出代碼3.我查了一下,它是「System could not find path specified」。這又是一件神祕的事情,因爲直接在機器上運行這個過程不會觸發這樣的退出代碼。

...然後會有辦法知道的過程中一直在尋找哪一條路徑?

編輯2:確實有一種方法可以知道進程無法訪問哪個路徑,但在我的情況下,procmon記錄的事件有數千個(!!!)事件,結果爲「NAME NOT FOUND」 「RegOpenKey」等。 此外,它似乎像我的遠程機器與CreateFileMapping函數,總是返回「文件鎖定只有讀者」,無論它嘗試「映射」,無論它試圖很難...

編輯3:我發現進入事先創建的會話,然後運行該過程改變了行爲,但該過程在啓動後仍然會被殺死,這次是退出代碼'-1073741819'...這是「訪問被拒絕」。將進一步調查。

編輯4:在遠程計算機上,所述PSversion爲2.0。在我的工作站上,PSversion爲5.0。我安裝了Service Pack 1,.NET Framework 4.5.2和WMF 5.0(包含PowerShell 5.0)。直到今天,這個過程運行良好,並沒有神祕死亡,但現在它幾秒鐘後吐出一個退出代碼3。我嘗試在遠程計算機上運行另一個應用程序:即使過程花費的時間超過了幾秒鐘,我也會完成並輸出結果。 「那麼它一定是應用程序!」我告訴自己......不行!當我從虛擬機運行相同的應用程序到我的工作站時,它工作得很好。 「那肯定是遠程機器!」 ...是的,關於這個。我如何能夠識別這兩臺機器之間的差異並修復遠程問題,以便我可以從我的工作站上運行我的應用程序?

+0

我想用已啓動的procmon調試它的行爲。臨時審覈流程開始/結束可能會有所幫助。以及任何關於殺死進程的信息。 – Vesper

+0

感謝您的提示,只是更新了問題 –

+0

不錯。 Procmon日誌應包含對該進程的訪問失敗嘗試或在您的腳本或任務內啓動的線程,該嘗試在枚舉文件夾時返回Windows錯誤0x03。檢查目標系統上是否缺少一些硬編碼路徑。 – Vesper

回答

0

在遠程機器上,PSversion爲2.0。在我的工作站上,PSversion爲5.0。我在遠程機器上安裝了Service Pack 1,.NET Framework 4.5.2和WMF 4.0(包括PowerShell 4.0),然後從我的工作站遠程啓動了我的進程,比以往任何時候都更加健康。

結論:使用PowerShell 2.0的遠程處理不是長期的進程,一個很好的解決方案,必將導致以後的問題,特別是如果接收設備運行的是舊版本的PS的。

課一週:更新你的東西,夥計們。