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). Вы должны быть членом группы "Администраторы" на компьютере, на котором находится процесс, или быть пользователем, выполняющим скрипт, запускающий процесс.
После выбора пространства выполнения для отладки открывается сеанс удаленной отладки для пространства выполнения, если оно выполняет команду или останавливается в отладчике. Затем можно отлаживать скрипт пространства выполнения так же, как и другие скрипты удаленного сеанса.
Отсоединитесь от сеанса отладки, а затем интерактивного сеанса с процессом, дважды выполнив выход, или остановите выполнение скрипта, выполнив существующую команду завершения отладчика.
Если указать процесс с помощью параметра Name и найден только один процесс с указанным именем, будет введен процесс. Если найдено несколько процессов с указанным именем, PowerShell возвращает ошибку и выводит список всех найденных процессов с указанным именем.
Для поддержки подключения к процессам на удаленных компьютерах Enter-PSHostProcess
командлет включен на указанном удаленном компьютере, чтобы можно было подключиться к локальному процессу в удаленном сеансе PowerShell.
Примеры
Пример, часть 1. Запуск отладки пространства выполнения в процессе интегрированной среды сценариев PowerShell
В этом примере вы запускаете Enter-PSHostProcess
из консоли PowerShell, чтобы войти в процесс интегрированной среды сценариев PowerShell. В итоговом интерактивном сеансе можно найти пространство выполнения, которое требуется отладить, запустив 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. Отладка определенного пространства выполнения
Затем выполните отладку пространства выполнения с идентификатором 4, в котором выполняется долго выполняющийся скрипт другого пользователя. В списке, возвращенном из Get-Runspace
, обратите внимание, что состояние пространства выполнения — Открыто, а доступность — Занята, то есть в пространстве выполнения по-прежнему выполняется долго выполняющийся скрипт. Объекты пространства выполнения, возвращаемые командой Get-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
командлет .
Пример, часть 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
для отображения доменных имен приложений.
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
Задает процесс объектом 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.
Чтобы выйти из процесса, введите exit и нажмите клавишу ВВОД.
До PowerShell 7.1 удаленное взаимодействие по SSH не поддерживало удаленные сеансы со вторым прыжком. Эта возможность была ограничена сеансами через WinRM. PowerShell 7.1 позволяет Enter-PSSession
и Enter-PSHostProcess
работать в любом интерактивном удаленном сеансе.