Enter-PSHostProcess
使用本機行程連線至互動式工作階段並輸入 。
語法
ProcessIdParameterSet (預設值)
Enter-PSHostProcess
[-Id] <Int32>
[[-AppDomainName] <String>]
[<CommonParameters>]
ProcessParameterSet
Enter-PSHostProcess
[-Process] <Process>
[[-AppDomainName] <String>]
[<CommonParameters>]
ProcessNameParameterSet
Enter-PSHostProcess
[-Name] <String>
[[-AppDomainName] <String>]
[<CommonParameters>]
PSHostProcessInfoParameterSet
Enter-PSHostProcess
[-HostProcessInfo] <PSHostProcessInfo>
[[-AppDomainName] <String>]
[<CommonParameters>]
PipeNameParameterSet
Enter-PSHostProcess
-CustomPipeName <String>
[<CommonParameters>]
Description
Enter-PSHostProcess Cmdlet 會連線到 ,並使用本機進程進入互動式會話。 從 PowerShell 6.2 開始,非 Windows 平台上支援此 Cmdlet。
遠端互動式會話是在已在執行 PowerShell 的現有進程中執行,而不是建立新進程來裝載 PowerShell 並執行遠端會話。 當您在指定的進程上與遠端會話互動時,您可以列舉執行 runspaces,然後執行 Debug-Runspace 或 Enable-RunspaceDebug來選取要偵錯的 Runspace。
您要輸入的程式必須載入 PowerShell (System.Management.Automation.dll)。 您必須是找到進程之電腦上的 Administrators 群組成員,或者您必須是執行啟動進程之腳本的使用者。
選取要偵錯的 Runspace 之後,如果 Runspace 目前執行命令或在調試程式中停止,則會開啟 Runspace 的遠端偵錯會話。 然後,您可以使用偵錯其他遠端會話腳本的相同方式來偵錯 Runspace 腳本。
從偵錯會話中斷連結,然後使用進程執行兩次互動式會話,或執行現有的調試程序結束命令來停止腳本執行。
如果您使用 Name 參數來指定進程,而且只有一個進程以指定的名稱找到,則會輸入進程。 如果找到具有指定名稱的多個進程,PowerShell 會傳回錯誤,並列出以指定名稱找到的所有進程。
為了支援在遠端電腦上附加至進程,Enter-PSHostProcess Cmdlet 是在指定的遠端電腦上啟用,因此您可以在遠端 PowerShell 工作階段內附加至本機進程。
範例
範例第1部分:開始偵錯 PowerShell ISE 進程內的 Runspace
在此範例中,您會從PowerShell控制台內執行 Enter-PSHostProcess,以輸入PowerShell ISE 程式。 在產生的互動式會話中,您可以執行 Get-Runspace來尋找您想要偵錯的 Runspace,然後偵錯 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 部分:偵錯特定的 Runspace
接下來,偵錯 Runspace ID 4,其正在執行其他用戶長時間執行的腳本。 從從 Get-Runspace傳回的清單中,請注意 Runspace State 為 Opened,而 Availability 為 Busy,這表示 Runspace 仍在執行長時間執行的腳本。
Get-Runspace 所傳回的 runspace 物件也會有 NoteProperty,如果有的話,稱為 ScriptStackTrace 執行中的命令堆疊。
[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 Cmdlet,以使用此 Runspace 啟動互動式偵錯會話。
範例第3部分:完成偵錯會話並結束
完成偵錯之後,請執行結束調試程式命令,讓腳本繼續執行,而不附加調試程式。 或者,您可以使用 q 或 Stop 命令結束除錯程式。
當您完成處理中工作時,請執行 Exit-PSHostProcess Cmdlet 結束進程。 這會傳回 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 |
| 預設值: | DefaultAppDomain |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ProcessIdParameterSet
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ProcessParameterSet
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ProcessNameParameterSet
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
PSHostProcessInfoParameterSet
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-CustomPipeName
取得或設定要連接的自定義命名管道名稱。 這通常會與 pwsh -CustomPipeName搭配使用。
此參數是在 PowerShell 6.2 中引進的。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
PipeNameParameterSet
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-HostProcessInfo
指定可以與 PowerShell 連線 PSHostProcessInfo 物件。 使用 Get-PSHostProcessInfo 取得物件。
參數屬性
| 類型: | PSHostProcessInfo |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
PSHostProcessInfoParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Id
依進程識別子指定進程。 若要取得進程標識碼,請執行 Get-Process Cmdlet。
參數屬性
| 類型: | Int32 |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ProcessIdParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Name
依行程名稱指定進程。 若要取得進程名稱,請執行 Get-Process Cmdlet。 您也可以從任務管理員中進程的 [屬性] 對話框取得進程名稱。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ProcessNameParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Process
指定進程對象的進程。 使用此參數最簡單的方式是儲存 Get-Process 命令的結果,該命令會傳回您想要在變數中輸入的進程,然後將變數指定為此參數的值。
參數屬性
| 類型: | Process |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ProcessParameterSet
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
Process
備註
Enter-PSHostProcess 無法輸入執行命令的 PowerShell 工作階段程式。 不過,您可以輸入另一個 PowerShell 工作階段的程式,或與您執行 Enter-PSHostProcess工作階段同時執行的 PowerShell ISE 會話。
Enter-PSHostProcess 只能輸入裝載PowerShell的進程。 也就是說,他們已載入 PowerShell 引擎。
若要從行程內結束進程,請輸入 結束,然後按 Enter。
在 PowerShell 7.1 之前,透過 SSH 進行遠端處理不支援第二躍點遠端會話。 這項功能僅限於使用 WinRM 的會話。 PowerShell 7.1 允許 Enter-PSSession 和 Enter-PSHostProcess 在任何互動式遠程會話內運作。