次の方法で共有


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から返された一覧から、runspace State が開かれていることに注意してください。Availability はビジーです。つまり、実行空間で実行時間の長いスクリプトがまだ実行されています。 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

省略した場合に接続するアプリケーション ドメイン名を指定し、 DefaultAppDomain を使用します。 Get-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

入力

Process

メモ

Enter-PSHostProcess では、コマンドを実行している PowerShell セッションのプロセスを入力できません。 ただし、別の PowerShell セッションのプロセスや、 Enter-PSHostProcessを実行しているセッションと同時に実行されている PowerShell ISE セッションを入力することもできます。

Enter-PSHostProcess は、PowerShell をホストしているプロセスのみを入力できます。 つまり、PowerShell エンジンが読み込まれました。

プロセス内からプロセスを終了するには、「 exit」と入力し、 Enter キーを押します。

PowerShell 7.1 より前では、SSH 経由のリモート処理は、次ホップのリモート セッションをサポートしていませんでした。 この機能は、WinRM を使用したセッションに限定されていました。 PowerShell 7.1 を使用すると、任意の対話型リモート セッション内で Enter-PSSessionEnter-PSHostProcess が機能します。