Поддержка 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]()
Ответы
Ответ 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