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


Debug-Runspace

Запускает интерактивный сеанс отладки с пространством выполнения.

Синтаксис

Debug-Runspace
     [-Runspace] <Runspace>
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-Name] <String>
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-Id] <Int32>
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-InstanceId] <Guid>
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Описание

Командлет Debug-Runspace запускает интерактивный сеанс отладки с локальным или удаленным активным пространством выполнения. Вы можете найти пространство выполнения, которое необходимо выполнить отладку, сначала выполнив Get-Process поиск процессов, связанных с PowerShell, а затем Enter-PSHostProcess с идентификатором процесса, указанным в параметре id для подключения к процессу, а затем Get-Runspace для перечисления пространств выполнения в процессе узла PowerShell.

После выбора пространства выполнения для отладки, если пространство выполнения в настоящее время выполняет команду или скрипт, или если скрипт остановился в точке останова, PowerShell открывает сеанс удаленного отладчика для пространства выполнения. Скрипт runspace можно отлаживать таким же образом, как отлаживаются скрипты удаленного сеанса.

Вы можете подключиться только к процессу узла PowerShell, если вы являетесь администратором на компьютере, на котором выполняется процесс, или выполняется скрипт, который требуется выполнить отладку. Кроме того, нельзя ввести узел, выполняющий текущий сеанс PowerShell. Можно ввести только узелный процесс, выполняющий другой сеанс PowerShell.

Примеры

Пример 1. Отладка удаленного пространства выполнения

В этом примере выполняется отладка пространства выполнения, открытого на удаленном компьютере WS10TestServer. В первой строке команды выполняется на удаленном компьютере и фильтруются Get-Process для процессов узла Windows PowerShell. В этом примере необходимо выполнить отладку процесса с идентификатором 1152, узлом среды сценариев Windows PowerShell.

PS C:\> Get-Process -ComputerName "WS10TestServer" -Name "*powershell*"

Handles      WS(K)   VM(M)      CPU(s)    Id  ProcessName
-------      -----   -----      ------    --  -----------
    377      69912     63     2.09      2420  powershell
    399     123396    829     4.48      1152  powershell_ise

PS C:\> Enter-PSSession -ComputerName "WS10TestServer"
[WS10TestServer]:PS C:\> Enter-PSHostProcess -Id 1152
[WS10TestServer:][Process:1152]: PS C:\Users\Test\Documents> Get-Runspace

Id Name            ComputerName    Type          State         Availability
-- ----            ------------    ----          -----         ------------
 1 Runspace1       WS10TestServer  Remote        Opened        Available
 2 RemoteHost      WS10TestServer  Remote        Opened        Busy

[WS10TestServer][Process:1152]: PS C:\Users\Test\Documents> Debug-Runspace -Id 2

Hit Line breakpoint on 'C:\TestWFVar1.ps1:83'
At C:\TestWFVar1.ps1:83 char:1
+ $scriptVar = "Script Variable"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Process:1152]: [RSDBG: 2]: PS C:\> >

Во второй команде вы запустите Enter-PSSession удаленный сеанс в WS10TestServer. В третьей команде необходимо подключиться к узлу среды сценариев Windows PowerShell, запущенной на удаленном сервере Enter-PSHostProcess, и указав идентификатор процесса узла, полученного в первой команде, 1152.

В четвертой команде перечислены доступные пространства выполнения для идентификатора процесса 1152, выполнив команду Get-Runspace. Запишите идентификатор пространства выполнения Занято; он выполняет скрипт, который требуется выполнить отладку.

В последней команде начинается отладка открытого пространства выполнения, выполняющего скрипт, TestWFVar1.ps1путем выполнения Debug-Runspaceи идентификации пространства выполнения по идентификатору 2 путем добавления параметра Id . Так как в скрипте есть точка останова, отладчик открывается.

Параметры

-Confirm

Запрос подтверждения перед выполнением командлета.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Указывает идентификатор пространства выполнения. Можно запустить Get-Runspace для отображения идентификаторов пространства выполнения.

Type:Int32
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

Указывает пространство выполнения по идентификатору экземпляра, идентификатору GUID, который можно отобразить, выполнив команду Get-Runspace.

Type:Guid
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Задает пространство выполнения по имени. Можно запустить Get-Runspace , чтобы отобразить имена пространств выполнения.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Runspace

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

Type:Runspace
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

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

Runspace

Результаты Get-Runspace команды можно передать в этот командлет.

Примечания

Debug-Runspace работает с пространствами выполнения, которые находятся в состоянии "Открыто". Если состояние пространства выполнения изменяется из открытого в другое состояние, это пространство выполнения автоматически удаляется из списка выполнения. Пространство выполнения добавляется в список выполнения только в том случае, если оно соответствует следующим критериям.

  • Если он поступает из Invoke-Command; то есть идентификатор Invoke-Command GUID.
  • Если он поступает из Debug-Runspace; то есть имеет Debug-Runspace идентификатор GUID.
  • Если он поступает из рабочего процесса PowerShell, а идентификатор задания рабочего процесса совпадает с идентификатором текущего активного рабочего процесса отладчика.