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


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:\>  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 для отображения доменных имен приложения.

Тип:String
Position:1
Default value:DefaultAppDomain
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-CustomPipeName

Возвращает или задает имя настраиваемого именованного канала для подключения. Обычно это используется в сочетании с pwsh -CustomPipeName.

Этот параметр появился в PowerShell 6.2.

Тип:String
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-HostProcessInfo

Указывает объект PSHostProcessInfo, к которому можно подключиться с Помощью PowerShell. Используйте Get-PSHostProcessInfo для получения объекта.

Тип:PSHostProcessInfo
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Id

Задает процесс идентификатором процесса. Чтобы получить идентификатор процесса, выполните командлет Get-Process.

Тип:Int32
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Name

Задает процесс по имени процесса. Чтобы получить имя процесса, выполните командлет Get-Process. Вы также можете получить имена процессов из диалогового окна "Свойства" процесса в диспетчере задач.

Тип:String
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Process

Указывает процесс объектом процесса. Самый простой способ использовать этот параметр заключается в сохранении результатов команды Get-Process, возвращающей процесс, который требуется ввести в переменную, а затем указать переменную в качестве значения этого параметра.

Тип:Process
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

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

Process

Примечания

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

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

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

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