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 長連接並進入與本地程序的互動式工作階段。 從 PowerShell 6.2 開始,此指令小程式支援非 Windows 平台。
與其建立新的程序來承載 PowerShell 並執行遠端工作階段,遠端互動工作階段則是在已運行 PowerShell 的現有程序中執行。 當你與指定程序的遠端會話互動時,你可以列舉執行中的跑道空間,然後透過執行或 Debug-RunspaceEnable-RunspaceDebug來選擇一個跑道空間來除錯。
你想輸入的程序必須是主機 PowerShell(System.Management.Automation.dll)。 你必須是該程序所在電腦管理員群組的成員,或是執行啟動該程序腳本的使用者。
當你選擇了要除錯的執行空間後,如果該跑道空間正在執行指令或在除錯器中停止,就會為該跑道空間開啟遠端除錯會話。 接著你可以像除錯其他遠端會話腳本一樣,來除錯跑動空間腳本。
透過執行兩次 exit 來斷開除錯會話,然後與該程序的互動會話分離,或透過執行現有的除錯器 quit 指令停止腳本執行。
如果你用 Name 參數指定一個程序,且只找到一個該名稱的程序,該程序就會被輸入。 若發現多個指定名稱的程序,PowerShell 會回傳錯誤,並列出所有該名稱的程序。
為了支援連接遠端電腦上的程序,必須在指定的遠端電腦啟用 cmdlet Enter-PSHostProcess ,這樣你就能在遠端 PowerShell 會話中附加到本地程序。
範例
範例 第一部分:開始在 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
範例第二部分:除錯特定跑道空間
接著,除錯跑位 ID 4,也就是執行另一位使用者長期執行腳本的任務。 從返回 Get-Runspace的清單中,注意跑道空間 狀態 為「開啟」,「 可用性 為忙碌」,表示跑道空間仍在執行長跑腳本。 由 返回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 cmdlet 啟動互動式除錯工作。
範例第三部分:完成除錯工作並退出
除錯結束後,執行 exit debugger 指令,讓腳本繼續執行,無需除錯器。 或者,你也可以用 q 或 Stop 指令退出除錯器。
當你完成流程工作後,執行指令碼(cmdlet)退出程序 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 |
| 預設值: | 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
透過程序 ID 指定程序。 要取得程序 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 引擎。
要從程序內部退出程序,輸入 exit,然後按 Enter。
在 PowerShell 7.1 之前,透過 SSH 遠端支援不支援第二跳遠端會話。 這項功能僅限於使用 WinRM 的會話。 PowerShell 7.1 允許 Enter-PSSession 和 Enter-PSHostProcess 在任何互動式遠程會話內運作。