Как использовать "сухой ход" в powershell
Я просто стартер, сухая работа очень полезна, чтобы сделать параметр для тестирования, может ли любое тело сказать мне, как использовать его с легким способом? Я googled, но мало результатов по его использованию.
Большое спасибо
Ответы
Ответ 1
Использование в существующих командлетах
Явно поставьте параметр -WhatIf:
rm foo.txt -WhatIf
Результат:
What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".
Использовать существующие командлеты внутри функции или script
SupportsShouldProcess
атрибут автоматически распространяет -WhatIf
на поддерживаемые командлеты:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
Remove-Item $file
}
do-stuff foo.txt -WhatIf
Результат:
What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".
Использовать на своих собственных кодовых блоках
Явно использовать метод ShouldProcess()
, чтобы определить, прошел ли -WhatIf
:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
if ($PSCmdlet.ShouldProcess($file)) {
Write-Host "Deleting file"
Remove-Item $file
}
}
do-stuff foo.txt -WhatIf
Результат:
What if: Performing operation "do-stuff" on Target "foo.txt".
Использование для вложенных функций в том же модуле
SupportsShouldProcess
атрибут автоматически распространяет -WhatIf
на вложенные функции:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
if ($PSCmdlet.ShouldProcess($file)) {
Write-Host "Deleting file"
Remove-Item $file
}
inner "text"
}
function inner
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$s)
if ($PSCmdlet.ShouldProcess($s)) {
Write-Host "Inner task"
}
$s | out-file "temp9.txt"
}
do-stuff foo.txt -WhatIf
Результат:
What if: Performing operation "do-stuff" on Target "foo.txt".
What if: Performing operation "inner" on Target "text".
What if: Performing operation "Output to File" on Target "temp9.txt".
Использование для вложенных функций в другом модуле
К сожалению, -WhatIf не распространяется автоматически на функции, определенные в другом модуле. См. Powershell: как получить -whatif для распространения командлетов в другом модуле для обсуждения и обходного пути для этого.
Ответ 2
Вероятно, вы имеете в виду параметры -WhatIf
и -Confirm
для командлетов. Вы можете прочитать о них в Get-Help about_commonParameters
:
Описание параметров управления рисками
-WhatIf[:{$true | $false}]
Отображает сообщение, описывающее эффект команды, вместо выполнения команды.
Параметр WhatIf переопределяет значение $WhatIfPreference
переменная для текущей команды. Поскольку значение по умолчанию для $WhatIfPreference
переменная 0
(отключена), поведение WhatIf не выполняется без параметра WhatIf. Для получения дополнительной информации введите следующую команду:
get-help about_preference_variables
Допустимые значения:
$true
(-WhatIf:$true
). Имеет такой же эффект, как -WhatIf
.
$false
(-WhatIf:$false
). Подавляет автоматическое поведение WhatIf , что приводит к тому, что значение переменной $WhatIfPreference 1.
Например, следующая команда использует параметр WhatIf
в Remove-Item
команда:
PS> remove-item date.csv -whatif
Вместо удаления элемента Windows PowerShell перечисляет операции он будет выполнять и элементы, которые будут затронуты. Эта команда выводит следующий результат:
What if: Performing operation "Remove File" on
Target "C:\ps-test\date.csv".
-Confirm[:{$true | $false}]
Запрашивает подтверждение перед выполнением команды.
Параметр Confirm переопределяет значение параметра $ConfirmPreference переменная для текущей команды. Значение по умолчанию - Высокое. Для большего введите следующую команду:
get-help about_preference_variables
Допустимые значения:
$true
(-WhatIf:$true
). Имеет такой же эффект, как -Confirm
.
$false
(-Confirm:$false
). Подавляет автоматическое подтверждение, которая возникает, когда значение $ConfirmPreference
меньше, чем или равно оценочному риску командлета.
Например, следующая команда использует параметр Confirm с Удалить команду. Перед удалением элемента Windows PowerShell перечисляет операции, которые он будет выполнять, и элементы, которые будут затрагивается и просит одобрения.
PS C:\ps-test> remove-item tmp*.txt -confirm
Эта команда производит следующий вывод:
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target " C:\ps-test\tmp1.txt
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend
[?] Help (default is "Y"):