ShouldProcess

Кратко перескажу последний пост с официального блога разработчиков PowerShell’а. — http://blogs.msdn.com/powershell/archive/2006/12/15/confirmpreference.aspx
В PowerShell есть такая очень классная фишка как ShouldProcess, впрочем под этим названием она известна разработчикам коммандлетов. Для пользователей PoSH это выражается в обычных ключах –Confirm и –WhatIf которые поддерживаются практически всеми командами изменяющими параметры системы, или выполняющими критические операции.

PS L:\PowerShell> Stop-Process 7004 -Confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "calc (7004)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
PS>

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

PS L:\PowerShell> Remove-Item * -Recurse -WhatIf
What if: Performing operation "Remove Directory" on Target "L:\PowerShell\batch".
What if: Performing operation "Remove Directory" on Target "L:\PowerShell\bin".
What if: Performing operation "Remove Directory" on Target "L:\PowerShell\data".
What if: Performing operation "Remove Directory" on Target "L:\PowerShell\misc".
What if: Performing operation "Remove Directory" on Target "L:\PowerShell\ps1xml".
...

Но кроме этого можно настроить систему для автоматического управления подтверждением операций в зависимости от уровня их влияния на систему. Когда разработчики пишут командлеты, они могут обозначить уровень их воздействия на систему как “High”, “Medium” или “Low”. Например команда Exchange для удаления почтового ящика обьявлена как имеющая высокий уровень воздействия (High). Stop-Process определен как “Medium”. В результате можно установить переменную $ConfirmPreference на тот уровень автоматического подтверждения который вы хотите. В последующем примере мы попробуем остановить процесс Calc.exe с $ConfirmPreference установленной на “Low”, “Medium” и “High”.

PS L:\PowerShell> calc
PS L:\PowerShell> $ConfirmPreference="low"
PS L:\PowerShell> Stop-Process -ProcessName calc

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "calc (9852)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): n
PS L:\PowerShell> $ConfirmPreference="medium"
PS L:\PowerShell> Stop-Process -ProcessName calc

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "calc (9852)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): n
PS L:\PowerShell> $ConfirmPreference="High"
PS L:\PowerShell> Stop-Process -ProcessName calc
PS L:\PowerShell>

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

PS: Не старайтесь набирать «$ConfirmPreference» вручную :) обычно достаточно лишь $co[tab] То же относится и к командам, и к именам аргументов.

About these ads
Опубликовано в PowerShell. Комментарии отключены
Отслеживать

Get every new post delivered to your Inbox.

Join 39 other followers

%d bloggers like this: