共用方式為


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>]

Description

Enter-PSHostProcess Cmdlet 會連線並進入具有本機進程的互動式會話。

遠端互動式會話是在已經在執行 Windows PowerShell 的現有進程中執行,而不是建立新進程來裝載 Windows PowerShell 並執行遠端會話。 當您在指定的進程上與遠端會話互動時,您可以列舉執行 Runspaces,然後執行 Debug-Runspace 或 Enable-RunspaceDebug 來選取 Runspace 進行偵錯。

您想要輸入的程式必須是裝載 Windows PowerShell (System.Management.Automation.dll)。 您必須是找到進程之電腦上的 Administrators 群組成員,或者您必須是執行啟動進程之腳本的使用者。

選取要偵錯的 Runspace 之後,如果 Runspace 目前執行命令或在調試程式中停止,則會開啟 Runspace 的遠端偵錯會話。 然後,您可以使用偵錯其他遠端會話腳本的相同方式來偵錯 Runspace 腳本。

從偵錯會話中斷連結,然後使用進程執行兩次互動式會話,或執行現有的調試程序結束命令來停止腳本執行。

如果您使用 Name 參數來指定進程,而且只有一個進程以指定的名稱找到,則會輸入進程。 如果找到具有指定名稱的多個進程,Windows PowerShell 會傳回錯誤,並列出以指定名稱找到的所有進程。

為了支援在遠端電腦上附加至進程,Enter-PSHostProcess Cmdlet 是在指定的遠端電腦上啟用,因此您可以附加至遠端 Windows PowerShell 會話內的本機進程。

範例

範例 1:開始偵錯 Windows PowerShell ISE 程式內的 Runspace

In this example, you run **Enter-PSHostProcess** from within the Windows PowerShell console to enter the Windows PowerShell ISE process. In the resulting interactive session, you can find a runspace that you want to debug by running Get-Runspace, and then debug the runspace.
PS C:\> Enter-PSHostProcess -Name powershell_ise
[Process:1520]: PS C:\Test\Documents>

Next, get available runspaces within the process you have entered.
PS C:\> [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

The runspace objects returned by **Get-Runspace** also have a NoteProperty called **ScriptStackTrace** of the running command stack, if available.Next, debug runspace ID 4, that is running another user's long-running script. From the list returned from **Get-Runspace**, note that the runspace state is **Opened**, and **Availability** is **Busy**, meaning that the runspace is still running the long-running script.
PS C:\> [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>

Start an interactive debugging session with this runspace by running the Debug-Runspace cmdlet.
PS C:\> [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:\> >

After you are finished debugging, allow the script to continue running without the debugger attached by running the **exit** debugger command. Alternatively, you can quit the debugger with the **q** or **Stop** commands.
PS C:\> [Process:346]: [RSDBG: 3]: PS C:\> > exit
[Process:1520]: PS C:\>

When you are finished working in the process, exit the process by running the Exit-PSHostProcess cmdlet. This returns you to the PS C:\> prompt.
PS C:\> [Process:1520]: PS C:\>  Exit-PSHostProcess
PS C:\>

參數

-AppDomainName

類型:String
Position:1
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-HostProcessInfo

類型:PSHostProcessInfo
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

-Id

依進程識別子指定進程。 若要取得進程標識碼,請執行 Get-Process Cmdlet。

類型:Int32
Position:0
預設值:None
必要:True
接受管線輸入:False
接受萬用字元:False

-Name

依行程名稱指定進程。 若要取得進程名稱,請執行 Get-Process Cmdlet。 您也可以從任務管理員中進程的 [屬性] 對話框取得進程名稱。

類型:String
Position:0
預設值:None
必要:True
接受管線輸入:False
接受萬用字元:False

-Process

指定進程對象的進程。 使用此參數最簡單的方式是儲存 Get-Process 命令的結果,該命令會傳回您想要在變數中輸入的進程,然後將變數指定為此參數的值。

類型:Process
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

輸入

Process

備註

  • Enter-PSHostProcess 無法輸入執行命令的 Windows PowerShell 會話進程。 不過,您可以輸入另一個 Windows PowerShell 會話的程式,或與您執行所在的會話同時執行的 Windows PowerShell ISE 會話,Enter-PSHostProcess

    Enter-PSHostProcess 只能輸入裝載 Windows PowerShell 的進程。 也就是說,他們已載入 Windows PowerShell 引擎。

    若要從進程內結束進程,請輸入 exit,然後按 Enter。