Как использовать "сухой ход" в 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"):