Поддержка скриптов Powershell для -verbose - PullRequest
19 голосов
/ 12 декабря 2011

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

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

Подробные сообщения не записываются на хост.Я немного осмотрелся и обнаружил Support -Whatif, -Confirm, -Verbose - В СКРИПТАХ!

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

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

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

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

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

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

Powershell example result

Ответы [ 3 ]

23 голосов
/ 12 декабря 2011

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

## 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".
11 голосов
/ 30 июня 2012

Я новичок в PowerShell, но это просто сбило меня с толку:

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

[CmdletBinding()]
Param()

, чтобы ваш скрипт был:

[CmdletBinding()]
Param()
Write-Host "line 1"
Write-Verbose "line 2"
Write-Host "line 3"
5 голосов
/ 12 декабря 2011

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

Write-Verbose "Text of debug"

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...