11

PsExec -dいくつかのタスクを実行している間、これらのアプリをバックグラウンドで実行したいので、リモート PowerShell セッションでコンソール アプリケーションを起動するために使用しています。問題は、リモートの powershell セッションを .xml で強制終了しても、バックグラウンド アプリケーションを実行し続けたいことですRemove-PSSession。現在何が起こっているかというと、リモートの PowerShell セッションが強制終了されると、の助けを借りて開始されたすべてのプロセスが強制終了されますPsExec -d。プロセスツリーと、ウィンドウがそのようなものの寿命を管理する方法に関係があると思います。

リモート バックグラウンド プロセスを起動し、リモート セッションが強制終了された後もそのプロセスを維持する方法を知っている人はいますか?

4

1 に答える 1

31

ここでは、なぜそのように機能するのかを最初に説明します。おそらく、他の誰かがそれを使用して別の解決策をもたらすことができます。

WMIに基づくソリューションで回答を編集しました。

リモート セッションに入ると、次のようになります。

PS C:\Users\JPB> enter-PSSession -ComputerName 192.168.183.100 -Credential $cred
[192.168.183.100]: PS C:\Users\jpb\Documents>

wsmprovhost.exe以下に示すように、サーバー上にプロセスを作成します。

ここに画像の説明を入力

このリモート セッションで単にプロセスを開始すると、次のようになります。

[192.168.183.100]: PS C:\Users\jpb\Documents> Start-Process calc.exe

新しいプロセスは、wsmprovhost.exe以下に示すようにの子です。

ここに画像の説明を入力

リモート セッションを停止するwsmprovhost.exeと、子プロセスが消えてしまいます。

説明は、wsmprovhost.exeこれによって開始されたすべてのプロセスが同じジョブに属しているということです。

ここに画像の説明を入力

デフォルトでは、一方でこのジョブは、JOB_OBJECT_LIMIT_BREAKAWAY_OKフラグを使用してプロセスを開始することを許可しない制限フラグをサポートしていません。他方では、このジョブは、ジョブに関連付けられたすべてのプロセスを終了させる制限フラグをCREATE_BREAKAWAY_FROM_JOBサポートしています。JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE仕事は閉鎖されています。

をサポートするジョブをサポートするように WinRM を構成するソリューションが存在する可能性がありますJOB_OBJECT_LIMIT_BREAKAWAY_OK


編集:

そこで、Microsoft のドキュメントを読んで、WinRM を介して別の仕事でプログラムを開始するための文書化された技術的な方法を見つけました。デフォルトでは、ジョブに関連付けられたプロセスによって CreateProcess を使用して作成されたプロセスは、ジョブに関連付けられます。ただし、Win32_Process.Createを使用して作成されたプロセス はジョブに関連付けられません

したがって、リモート セッションで次のような WMI を使用してプロセスを作成する場合:

PS C:\silogix> $ps = New-PSSession -ComputerName 192.168.183.100 -Credential $cred
PS C:\silogix> Enter-PSSession -Session $ps
[192.168.183.100]: PS C:\Users\jpb\Documents> Invoke-WmiMethod -path win32_process -name create -argumentlist "calc.exe"



__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ProcessId        : 1236
ReturnValue      : 0

[192.168.183.100]: PS C:\Users\jpb\Documents> exit
PS C:\silogix> Remove-PSSession $ps

リモート セッションを停止すると wsmprovhost.exe は消えますが、新しいプロセスは次のようにサーバーに残ります。

ここに画像の説明を入力

WMI で開始されたプロセスは、どのジョブにも属しません。フランス語で「Ce qu'il fallait démontrer」と言います。

于 2012-01-02T20:17:57.740 に答える