Поделиться через


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

Входные данные

Process

Примечания

Enter-PSHostProcess Не удается войти в процесс сеанса PowerShell, в котором выполняется команда. Однако можно ввести процесс другого сеанса PowerShell или сеанс интегрированной среды сценариев PowerShell, который выполняется одновременно с сеансом, в котором выполняется Enter-PSHostProcess.

Enter-PSHostProcess может вводить только те процессы, в которых размещается PowerShell. То есть они загрузили подсистему PowerShell.

Чтобы выйти из процесса, введите exit и нажмите клавишу ВВОД.

До PowerShell 7.1 удаленное взаимодействие по SSH не поддерживало удаленные сеансы со вторым прыжком. Эта возможность была ограничена сеансами через WinRM. PowerShell 7.1 позволяет Enter-PSSession и Enter-PSHostProcess работать в любом интерактивном удаленном сеансе.