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). Вы должны быть членом группы "Администраторы" на компьютере, на котором найден процесс, или вы должны быть пользователем, выполняющим скрипт, который запустил процесс.
После выбора пространства выполнения для отладки удаленный сеанс отладки открывается для пространства выполнения, если он выполняет команду или останавливается в отладчике. Затем можно выполнить отладку скрипта runspace так же, как и другие скрипты удаленного сеанса.
Отсоедините от сеанса отладки, а затем интерактивный сеанс с процессом, выполнив два раза выход или остановите выполнение скрипта, выполнив существующую команду выхода отладчика.
Если вы указываете процесс с помощью параметра Name и существует только один процесс с указанным именем, процесс вводится. Если найдено несколько процессов с указанным именем, PowerShell возвращает ошибку и перечисляет все процессы, найденные с указанным именем.
Для поддержки подключения к процессам на удаленных компьютерах Enter-PSHostProcess
командлет включен на указанном удаленном компьютере, чтобы подключиться к локальному процессу в удаленном сеансе PowerShell.
Примеры
Пример 1. Запуск отладки пространства выполнения в процессе интеграции PowerShell
В этом примере вы запустите Enter-PSHostProcess
из консоли PowerShell, чтобы ввести процесс интегрированной среде сценариев PowerShell. В результирующем интерактивном сеансе можно найти пространство выполнения, которое требуется выполнить, запустив Get-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
Указывает доменное имя приложения для подключения, к которому не указано, использует defaultAppDomain. Используется Get-PSHostProcessInfo
для отображения доменных имен приложения.
Type: | String |
Position: | 1 |
Default value: | DefaultAppDomain |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CustomPipeName
Возвращает или задает пользовательское имя именованного канала для подключения. Обычно это используется в сочетании с pwsh -CustomPipeName
.
Этот параметр появился в PowerShell 6.2.
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostProcessInfo
Указывает объект PSHostProcessInfo , к которому можно подключиться с помощью PowerShell. Используется Get-PSHostProcessInfo
для получения объекта.
Type: | PSHostProcessInfo |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Id
Указывает процесс по идентификатору процесса. Чтобы получить идентификатор процесса, выполните Get-Process
командлет.
Type: | Int32 |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Задает процесс по имени процесса. Чтобы получить имя процесса, выполните Get-Process
командлет. Имена процессов также можно получить из диалогового окна "Свойства" процесса в диспетчере задач.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Process
Указывает процесс объектом процесса. Самый простой способ использовать этот параметр — сохранить результаты Get-Process
команды, возвращающей процесс, который требуется ввести в переменную, а затем указать переменную в качестве значения этого параметра.
Type: | Process |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Входные данные
Примечания
Enter-PSHostProcess
не может ввести процесс сеанса PowerShell, в котором выполняется команда. Однако можно ввести процесс другого сеанса PowerShell или сеанса сценариев PowerShell, который выполняется в то же время, что и сеанс, в котором выполняется.Enter-PSHostProcess
Enter-PSHostProcess
может ввести только те процессы, которые размещают PowerShell. То есть они загрузили подсистему PowerShell.
Чтобы выйти из процесса, введите выход и нажмите клавишу ВВОД.