ShouldProcess

重症度レベル:警告

デフォルト状態:常に有効

Description

このルールは SupportsShouldProcess 宣言と ShouldProcess コールの不一致を検出します。 コマンドレットが SupportsShouldProcess 属性を宣言する際、 ShouldProcess メソッドも呼び出すべきです。

違反は以下の場合に発生します:

  • 関数は SupportsShouldProcess を宣言しますが、呼び出しはしません ShouldProcess
  • 関数は ShouldProcess を呼び出しますが宣言しません SupportsShouldProcess

この違反を修正するには、 ShouldProcess 呼び出しが SupportsShouldProcess 属性宣言とペアリングされていることを確認してください。

詳細については、以下の記事を参照してください。

例

非準拠

function Set-File
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    Param
    (
        # Path to file
        [Parameter(Mandatory=$true)]
        $Path
    )
    'String' | Out-File -FilePath $Path
}

対応

function Set-File
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    Param
    (
        # Path to file
        [Parameter(Mandatory=$true)]
        $Path,

        [Parameter(Mandatory=$true)]
        [string]$Content
    )

    if ($PSCmdlet.ShouldProcess($Path, ("Setting content to '{0}'" -f $Content)))
    {
        $Content | Out-File -FilePath $Path
    }
    else
    {
        # Code that should be processed if doing a WhatIf operation
        # Must NOT change anything outside of the function / script
    }
}

ルールの設定

このルールは常に有効で、設定はできません。 このルールを避けるために、以下のいずれかの方法を用いてください。

  • 欲しいルールだけを含めるか、不要なルールを除外するカスタムルール設定ファイルを作成しましょう。
  • 特定のコードブロックに対してルール抑制を抑制するために、適切なルール抑制属性をコードに追加してください。 詳細については、PSScriptAnalyzerの使用に関する「抑制ルール」セクションをご覧ください。