2017-06-19 7 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が表示されているように見えますが、「システムが指定されたパスを見つけることができませんでした。プロセスをマシン上で直接実行することは、そのような終了コードを引き起こさないので、再び謎です。

...その後、プロセスが探していたパスを知る方法がありますか?

編集2:実際にプロセスがアクセスできなかったパスを知る方法がありますが、私の場合、procmonによって記録された「NAME NOT FOUND」という結果のイベントが数千(!!!) "RegOpenKey"など。 また、私のリモートマシンは、 "マップする"しようとしているDLLに関係なく、常に "FILE LOCKED ONLY READERS"を返すCreateFileMapping関数では苦労しているようです...

編集3:Iあらかじめ作成されたセッションを入力してプロセスを実行すると、動作が変更されたことがわかりましたが、このプロセスは終了コード「-1073741819」で開始された後もまだ抹消されています。さらに調査します。

編集4:リモートマシンでPSversionは2.0でした。私のワークステーションでは、PSversionは5.0でした。 Service Pack 1、.NET Framework 4.5.2、WMF 5.0(powerShell 5.0を含む)をインストールしました。今日までプロセスは正常に動作し、不思議に死ぬことはありませんでしたが、数秒後にExitコード3が吐き出されました。リモートマシンで別のアプリケーションを実行しようとしました。プロセスが数秒以上かかる場合でも、結果を出力して終了するようにしました。 "それはアプリでなければなりません!"私は自分自身に言った...いいえ! VMからワークステーションに同じパラメータで同じアプリケーションを実行すると、うまく動作します。 "それは遠隔のマシンでなければなりません!" ...ええ、それについて。どうすればこれらの2つのマシンの違いを特定し、リモートのものを修正してワークステーションからアプリを実行できるのでしょうか?

+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を実行している場合は、後で問題が発生します。

週のレッスン:あなたのものを更新してください。

関連する問題