Ответ 1
ТЛ; др:
Запустите
$DebugPreference = 'Continue'
, чтобы начать видеть результат вызововWrite-Debug
.Когда вы закончите, восстановите предпочтительную переменную
$DebugPreference
в значение по умолчанию, используя$DebugPreference = 'SilentlyContinue'
Печатается ли вывод из операторов Write-Debug
, управляется двумя механизмами:
Во всей области: по значению предпочтительной переменной
$DebugPreference
- см.Get-Help about_Preference_Variables
.Специальная область команд, при вызове командлета или расширенного сценария/функции (которая переопределяет значение
$DebugPreference
) с общим параметром-Debug
- см.Get-Help about_CommonParameters
.
$DebugPreference
по умолчанию - SilentlyContinue
, что объясняет, почему вы не видите никаких выводов из операторов Write-Debug
по умолчанию.
Когда вы используете общий параметр -Debug
, вы фактически устанавливаете $DebugPreference
только для вызываемой команды, а в Windows PowerShell вы неизменно устанавливаете для него значение Inquire
, который не только печатает Write-Debug
сообщения, но и делает паузу при каждом таком утверждении, чтобы спросить, как вы хотите продолжить.
В PowerShell Core (v6+) теперь это значение (более разумно) установлено на Continue
.
- Чтобы пользовательский сценарий или функция поддерживали общий параметр
-Debug
, он должен быть расширенным, объявленным с атрибутом[CmdletBinding()]
для его блокаparam()
, как ответ матиаса показывает.
Поскольку в Windows PowerShell такое поведение "подсказка при каждом" Write-Debug
-call может быть разрушительным, лучше подойдет $DebugPreference = 'Continue'
.
Как уже говорилось, в PowerShell Core (v6+) это больше не является проблемой.