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


Set-PSBreakpoint

Устанавливает точку останова на строке, команде или переменной.

Синтаксис

Set-PSBreakpoint
   [-Action <ScriptBlock>]
   [[-Column] <Int32>]
   [-Line] <Int32[]>
   [-Script] <String[]>
   [-Runspace <Runspace>]
   [<CommonParameters>]
Set-PSBreakpoint
   [-Action <ScriptBlock>]
   -Command <String[]>
   [[-Script] <String[]>]
   [-Runspace <Runspace>]
   [<CommonParameters>]
Set-PSBreakpoint
   [-Action <ScriptBlock>]
   [[-Script] <String[]>]
   -Variable <String[]>
   [-Mode <VariableAccessMode>]
   [-Runspace <Runspace>]
   [<CommonParameters>]

Описание

Командлет Set-PSBreakpoint задает точку останова в скрипте или любой команде, выполняемой в текущем сеансе. С помощью Set-PSBreakpoint можно задать точку останова перед выполнением скрипта или выполнением команды или во время отладки при остановке в другой точке останова.

Set-PSBreakpoint не удается задать точку останова на удаленном компьютере. Для отладки сценария на удаленном компьютере скопируйте сценарий на локальный компьютер, а затем выполните отладку локально.

Каждая Set-PSBreakpoint команда создает один из следующих трех типов точек останова:

  • Точка останова строки — задает точки останова в определенных координатах строки и столбца.
  • Точка останова команды — задает точки останова для команд и функций.
  • Переменная точка останова — задает точки останова для переменных.

Точку останова можно задать для нескольких строк, команд или переменных в одной Set-PSBreakpoint команде, но каждая Set-PSBreakpoint команда задает только один тип точки останова.

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

Командлет Set-PSBreakpoint является одним из нескольких командлетов, предназначенных для отладки скриптов PowerShell. Дополнительные сведения об отладчике PowerShell см. в разделе about_Debuggers.

Примеры

Пример 1. Установка точки останова в строке

В этом примере устанавливается точка останова в строке 5 в скрипте Sample.ps1. При выполнении скрипта выполнение останавливается непосредственно перед выполнением строки 5.

Set-PSBreakpoint -Script "sample.ps1" -Line 5

Column     : 0
Line       : 5
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

При установке новой точки останова по номеру Set-PSBreakpoint строки командлет создает объект точки останова строки (System.Management.Automation.LineBreakpoint), который включает идентификатор точки останова и число попаданий.

Пример 2. Установка точки останова для функции

В этом примере создается точка останова команды для Increment функции в командлете Sample.ps1. Сценарий останавливает выполнение непосредственно перед каждым вызовом указанной функции.

Set-PSBreakpoint -Command "Increment" -Script "sample.ps1"

Command    : Increment
Action     :
Enabled    : True
HitCount   : 0
Id         : 1
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

Результатом является объект точки останова команды. Перед выполнением скрипта значение свойства HitCount равно 0.

Пример 3. Установка точки останова для переменной

В этом примере устанавливается точка останова для переменной Server в скрипте Sample.ps1. Он использует параметр Mode со значением ReadWrite , чтобы остановить выполнение при чтении значения переменной и непосредственно перед изменением значения.

Set-PSBreakpoint -Script "sample.ps1" -Variable "Server" -Mode ReadWrite

Пример 4. Установка точки останова для каждой команды, начинающейся с указанного текста

В этом примере задается точка останова для каждой команды в скрипте Sample.ps1, который начинается с "write", например Write-Host.

Set-PSBreakpoint -Script Sample.ps1 -Command "write*"

Пример 5. Установка точки останова в зависимости от значения переменной

В этом примере выполнение DiskTest функции в скрипте Test.ps1 останавливается, только если значение переменной $Disk больше 2.

Set-PSBreakpoint -Script "test.ps1" -Command "DiskTest" -Action { if ($Disk -gt 2) { break } }

Значение действия — это блок скрипта, который проверяет значение переменной $Disk в функции.

Действие использует break ключевое слово для остановки выполнения при выполнении условия. Альтернатива (и значение по умолчанию) — Continue.

Пример 6. Установка точки останова для функции

В этом примере устанавливается точка останова для CheckLog функции. Поскольку команда не указывает сценарий, точка останова устанавливается для любого объекта, который выполняется в текущем сеансе. Отладчик останавливается при вызове функции, а не при ее объявлении.

PS> Set-PSBreakpoint -Command "checklog"
Id       : 0
Command  : checklog
Enabled  : True
HitCount : 0
Action   :

function CheckLog {
>> get-eventlog -log Application |
>> where {($_.source -like "TestApp") -and ($_.Message -like "*failed*")}
>>}
>>
PS> Checklog
DEBUG: Hit breakpoint(s)
DEBUG:  Function breakpoint on 'prompt:Checklog'

Пример 7. Установка точек останова на нескольких строках

В этом примере задаются три точки останова строки в скрипте Sample.ps1. Она задает одну точку останова в столбце 2 каждой из строк, указанных в сценарии. Действие, указанное в параметре Action , применяется ко всем точкам останова.

PS C:\> Set-PSBreakpoint -Script "sample.ps1" -Line 1, 14, 19 -Column 2 -Action {&(log.ps1)}

Column     : 2
Line       : 1
Action     :
Enabled    : True
HitCount   : 0
Id         : 6
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1


Column     : 2
Line       : 14
Action     :
Enabled    : True
HitCount   : 0
Id         : 7
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1


Column     : 2
Line       : 19
Action     :
Enabled    : True
HitCount   : 0
Id         : 8
Script     : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1

Пример 8. Установка точки останова в пространстве выполнения

В этом примере запускается задание. Пространство выполнения хранится в переменной и передается команде Set-PSBreakPoint с параметром Runspace.

Start-Job -ScriptBlock {
    Start-Sleep -Seconds 10
}

$runspace = Get-Runspace -Id 1

Set-PSBreakpoint -Command Start-Sleep -Runspace $runspace

Параметры

-Action

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

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

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

Дополнительные сведения см. в разделе about_Script_Blocks, about_Break и about_Continue.

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Column

Указывает номер столбца в файле сценария, в котором выполнение останавливается. Введите только один номер столбца. Значение по умолчанию: столбец 1.

Значение Column используется со значением параметра Line для указания точки останова. Если параметр Line указывает несколько строк, параметр Column устанавливает точку останова в указанном столбце на каждой из указанных строк. PowerShell прекращает выполнение перед оператором или выражением, включающим символ в указанной строке и позиции столбца.

Столбцы отсчитываются от верхней левой границы, начиная с номера столбца 1 (не 0). Если указать столбец, который не существует в сценарии, ошибка не объявляется, однако точка останова не выполняется.

Type:Int32
Position:2
Default value:1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Command

Задает точку останова команды. Введите имена командлетов, например Get-Process, или имена функций. Разрешено использовать подстановочные знаки.

Выполнение останавливается непосредственно перед выполнением каждого экземпляра каждой команды. Если команда является функцией, выполнение останавливается при каждом вызове функции и в каждом разделе BEGIN, PROCESS и END.

Type:String[]
Aliases:C
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Line

Задает точку останова строки в сценарии. Введите один или несколько номеров строк, разделенных запятыми. PowerShell останавливается непосредственно перед выполнением инструкции, которая начинается с каждой из указанных строк.

Строки отсчитываются от верхней левой границы файла сценария, начиная с номера строки 1 (не 0). Если указать пустую строку, выполнение останавливается перед следующей непустой строкой. Если строка выходит за пределы диапазона, останов не выполняется.

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Mode

Указывает режим доступа, который активирует переменные точки останова. Значение по умолчанию — Запись.

Этот параметр действителен, только если в команде используется параметр Variable . Режим применяется ко всем точкам останова, заданным в команде. Допустимые значения для этого параметра:

  • Запись — останавливает выполнение непосредственно перед записью нового значения в переменную.
  • Чтение — останавливает выполнение при чтении переменной, т. е. при доступе к ее значению для назначения, отображения или использования. В режиме чтения выполнение не прекращается при изменении значения переменной.
  • ReadWrite — останавливает выполнение при чтении или записи переменной.
Type:VariableAccessMode
Accepted values:Read, Write, ReadWrite
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Runspace

Задает идентификатор объекта Runspace , чтобы можно было взаимодействовать с точками останова в указанном пространстве выполнения.

Этот параметр был добавлен в PowerShell 7.2.

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

-Script

Задает массив файлов скриптов, в котором этот командлет задает точку останова. Введите пути и имена одного или нескольких файлов сценариев. Если файлы находятся в текущем каталоге, путь можно опустить. Разрешено использовать подстановочные знаки.

По умолчанию точки останова переменной и точки останова команды задаются в любых командах, которые выполняются в текущем сеансе. Этот параметр является обязательным, только если задается точка останова строки.

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

-Variable

Указывает массив переменных, для которой этот командлет устанавливает точки останова. Введите разделенный запятыми список переменных без знаков доллара ($).

Используйте параметр Mode , чтобы определить режим доступа, который активирует точки останова. Режим по умолчанию, Write, останавливает выполнение непосредственно перед записью нового значения в переменную.

Type:String[]
Aliases:V
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

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

None

Вы не можете передавать объекты в этот командлет.

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

CommandBreakpoint

LineBreakpoint

VariableBreakpoint

Set-PSBreakpoint возвращает объект , представляющий каждую заданную точку останова.

Примечания

PowerShell включает следующие псевдонимы для Set-PSBreakpoint:

  • Для всех платформ.

    • sbp
  • Set-PSBreakpoint не удается задать точку останова на удаленном компьютере. Для отладки сценария на удаленном компьютере скопируйте сценарий на локальный компьютер, а затем выполните отладку локально.

  • При установке точки останова в нескольких строках, команде или переменной Set-PSBreakpoint создается объект точки останова для каждой записи.

  • При задании точки останова в функции или переменной в командной строке можно задать точку останова до или после создания функции или переменной.