Enter-PSHostProcess
ローカル プロセスに接続して対話型セッションに入ります。
構文
Enter-PSHostProcess
[-Id] <Int32>
[[-AppDomainName] <String>]
[<CommonParameters>]
Enter-PSHostProcess
[-Process] <Process>
[[-AppDomainName] <String>]
[<CommonParameters>]
Enter-PSHostProcess
[-Name] <String>
[[-AppDomainName] <String>]
[<CommonParameters>]
Enter-PSHostProcess
[-HostProcessInfo] <PSHostProcessInfo>
[[-AppDomainName] <String>]
[<CommonParameters>]
Enter-PSHostProcess
-CustomPipeName <String>
[<CommonParameters>]
説明
Enter-PSHostProcess
コマンドレットは、ローカル プロセスに接続して対話型セッションに入ります。 PowerShell 6.2 以降、このコマンドレットは Windows 以外のプラットフォームでサポートされています。
PowerShell をホストしてリモート セッションを実行する新しいプロセスを作成する代わりに、リモートの対話型セッションは、既に PowerShell を実行している既存のプロセスで実行されます。 指定したプロセスでリモート セッションと対話する場合は、実行中の実行空間を列挙し、Debug-Runspace
または Enable-RunspaceDebug
を実行してデバッグする実行空間を選択できます。
入力するプロセスは、PowerShell (System.Management.Automation.dll) をホストしている必要があります。 プロセスが見つかったコンピューターの Administrators グループのメンバーであるか、プロセスを開始したスクリプトを実行しているユーザーである必要があります。
デバッグする実行空間を選択した後、リモート デバッグ セッションが現在コマンドを実行しているか、デバッガーで停止している場合、その実行空間に対して開かれます。 その後、他のリモート セッション スクリプトをデバッグするのと同じ方法で、実行空間スクリプトをデバッグできます。
デバッグ セッションからデタッチし、プロセスとの対話型セッションを終了 2 回実行するか、既存のデバッガー終了コマンドを実行してスクリプトの実行を停止します。
Name パラメーターを使用してプロセスを指定し、指定した名前のプロセスが 1 つだけ見つかった場合は、プロセスが入力されます。 指定した名前の複数のプロセスが見つかった場合、PowerShell はエラーを返し、指定した名前で検出されたすべてのプロセスを一覧表示します。
リモート コンピューター上のプロセスへのアタッチをサポートするために、Enter-PSHostProcess
コマンドレットは指定されたリモート コンピューターで有効になっており、リモート PowerShell セッション内でローカル プロセスにアタッチできます。
例
パート 1 の例: PowerShell ISE プロセス内で実行空間のデバッグを開始する
この例では、PowerShell コンソール内から Enter-PSHostProcess
を実行して、PowerShell ISE プロセスに入ります。 結果の対話型セッションでは、Get-Runspace
を実行し、実行空間をデバッグすることで、デバッグする実行空間を見つけることができます。
PS C:\> Enter-PSHostProcess -Name powershell_ise
[Process:1520]: PS C:\> Get-Runspace
Id Name InstanceId State Availability
-- ------- ----------- ------ -------------
1 Runspace1 2d91211d-9cce-42f0-ab0e-71ac258b32b5 Opened Available
2 Runspace2 a3855043-cb16-424a-a616-685360c3763b Opened RemoteDebug
3 MyLocalRS 2236dbd8-2105-4dec-a15a-a27d0bfaacb5 Opened LocalDebug
4 MyRunspace 771356e9-8c44-4b70-9de5-dd17cb41e48e Opened Busy
5 Runspace8 3e517382-a97a-49ba-9c3c-fd21f6664288 Broken None
パート 2 の例: 特定の実行空間をデバッグする
次に、別のユーザーの実行時間の長いスクリプトを実行している実行空間 ID 4 をデバッグします。 Get-Runspace
によって返される実行空間オブジェクトには、実行中のコマンド スタック ScriptStackTrace と呼ばれる NoteProperty もあります (使用可能な場合)。
[Process:1520]: PS C:\> (Get-Runspace -Id 4).ScriptStackTrace
Command Arguments Location
------- --------- --------
MyModuleWorkflowF1 {} TestNoFile3.psm1: line 6
WFTest1 {} TestNoFile2.ps1: line 14
TestNoFile2.ps1 {} TestNoFile2.ps1: line 22
<ScriptBlock> {} <No file>
[Process: 1520]: PS C:\> Debug-Runspace -Id 4
Hit Line breakpoint on 'C:\TestWFVar1.ps1:83'
At C:\TestWFVar1.ps1:83 char:1
+ $scriptVar = "Script Variable"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Process: 1520]: [RSDBG: 4]: PS C:\>
Debug-Runspace
コマンドレットを実行して、この実行空間で対話型デバッグ セッションを開始します。
パート 3 の例: デバッグ セッションを終了して終了する
デバッグが完了したら、終了デバッガー コマンドを実行して、デバッガーをアタッチせずにスクリプトの実行を続行できるようにします。 または、q または Stop コマンドを使用してデバッガーを終了することもできます。
プロセスの作業が完了したら、Exit-PSHostProcess
コマンドレットを実行してプロセスを終了します。 これにより、PS C:\>
プロンプトに戻ります。
[Process:346]: [RSDBG: 3]: PS C:\> exit
[Process:1520]: PS C:\>
[Process:1520]: PS C:\> Exit-PSHostProcess
PS C:\>
パラメーター
-AppDomainName
省略した場合に接続するアプリケーション ドメイン名を指定し、DefaultAppDomainGet-PSHostProcessInfo
を使用して、アプリケーション ドメイン名を表示します。
型: | String |
配置: | 1 |
規定値: | DefaultAppDomain |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CustomPipeName
接続するカスタムの名前付きパイプ名を取得または設定します。 これは通常、pwsh -CustomPipeName
と組み合わせて使用されます。
このパラメーターは、PowerShell 6.2 で導入されました。
型: | String |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-HostProcessInfo
PowerShell で接続できる PSHostProcessInfo オブジェクトを指定します。
Get-PSHostProcessInfo
を使用してオブジェクトを取得します。
型: | PSHostProcessInfo |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Id
プロセス ID でプロセスを指定します。 プロセス ID を取得するには、Get-Process
コマンドレットを実行します。
型: | Int32 |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Name
プロセス名でプロセスを指定します。 プロセス名を取得するには、Get-Process
コマンドレットを実行します。 タスク マネージャーのプロセスの [プロパティ] ダイアログ ボックスからプロセス名を取得することもできます。
型: | String |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Process
プロセス オブジェクトによるプロセスを指定します。 このパラメーターを使用する最も簡単な方法は、変数に入力するプロセスを返す Get-Process
コマンドの結果を保存し、変数をこのパラメーターの値として指定することです。
型: | Process |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
入力
メモ
Enter-PSHostProcess
コマンドを実行している PowerShell セッションのプロセスに入ることはできません。 ただし、別の PowerShell セッションのプロセスや、Enter-PSHostProcess
を実行しているセッションと同時に実行されている PowerShell ISE セッションを入力することもできます。
Enter-PSHostProcess
は、PowerShell をホストしているプロセスのみを入力できます。 つまり、PowerShell エンジンが読み込まれました。
プロセス内からプロセスを終了するには、「
PowerShell 7.1 より前のバージョンでは、SSH 経由のリモート処理では、第 2 ホップリモート セッションはサポートされていませんでした。 この機能は、WinRM を使用するセッションに限定されていました。 PowerShell 7.1 を使用すると、Enter-PSSession
と Enter-PSHostProcess
を任意の対話型リモート セッション内から操作できます。