Подтвердить что ты не робот

Поддержка Powershell script для -verbose

Я создаю .ps1 script, который вызывает Write-Verbose. Я хотел бы иметь возможность включать/отключать их.

Я надеялся, что при вызове script я могу передать флаг -Verbose, и все будет работать. К сожалению, это не так.

Подробные сообщения не выписываются хосту. Я немного оглянулся и нашел Поддержка -Whatif, -Confirm, -Verbose - В SCRIPTS!

Но это с 2007 года, и член команды PS заявил, что они искали встроенную поддержку в PS v2.

У кого-нибудь есть какие-либо обновления по этому поводу или мы должны использовать тот же метод, описанный в этом сообщении в блоге?

Ниже приведен пример текущего поведения.

Я создал простой script, ex01.ps1, со следующим.

Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"

Я сначала выполнил script с .\ex01.ps1, и только 1 и 2 были напечатаны, как ожидалось. Затем я выполнил его с .\ex01.ps1 -verbose и получил тот же результат. Я ожидал, что все 3 строки будут напечатаны второй раз.

Powershell example result

4b9b3361

Ответ 1

Чтобы иметь переключатель Verbose, вам нужно указать атрибут CmdletBinding в script. Чтобы добавить поддержку переключателей Confirm и WhatIf, добавьте атрибут SupportsShouldProcess и вызовите метод ShouldProcess в script:

## content of .\ex01.ps1 ##
[CmdletBinding(SupportsShouldProcess=$true)]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"

if($PSCmdlet.ShouldProcess($env:COMPUTERNAME,'Remove X'))
{
    "do something"
}


###########################


PS > .\ex01.ps1
line 1
line 3

PS > .\ex01.ps1 -Verbose
line 1
VERBOSE: line 2
line 3

PS > .\ex01.ps1 -WhatIf
line 1
line 3
What if: Performing operation "Remove X" on Target "PC1".

Ответ 2

Я новичок в PowerShell, но это только подтолкнуло меня:

если ваш script не имеет параметров, ведомый переключатель не будет передан. просто поставьте это в верхней части своего script:

[CmdletBinding()]
Param()

поэтому ваш script будет:

[CmdletBinding()]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"

Ответ 3

Вы можете посмотреть Расширенные функции: с помощью расширенных функций вы можете воспользоваться общим параметром -verbose. Просто выведите свой подробный вывод таким образом:

Write-Verbose "Text of debug"

И когда переменная $VerbosePreference оболочки не настроена на "SilentlyContinue" ( "Продолжить" включит вывод), вы увидите ваш подробный вывод.

Эта статья Windows IP Pro Part1 и spcialy Part2 определяет, что еще вы можете сделать с помощью расширенных функций. Вы также можете найти пошаговое руководство в Руководство по расширенным функциям PowerShells