15

私は初心者です。dry-run は、テストするパラメータを作成するのに非常に便利です。簡単な方法で使用する方法を誰か教えてもらえますか? 私はそれをグーグルで検索しましたが、その使用に関する結果はほとんどありません。

どうもありがとうございました

4

3 に答える 3

27

既存のコマンドレットで使用

-WhatIfパラメーターを明示的に指定します。

rm foo.txt -WhatIf

結果:

What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".

関数またはスクリプト内の既存のコマンドレットで使用

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を取得して別のモジュールのコマンドレットに伝達する方法を参照してください。

于 2012-06-27T18:01:56.350 に答える
4

おそらく、コマンドレットの-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)。$WhatIfPreference 変数の値が 1 の場合に生じる自動 WhatIf 動作を抑制します。

たとえば、次のコマンドは、コマンドで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の値がコマンドレットの推定リスク以下の場合に発生する自動確認を抑制します。

たとえば、次のコマンドは、Remove-Item コマンドで 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"):
于 2012-06-26T16:26:34.273 に答える