重症度レベル:警告
デフォルト状態:常に有効
Description
このルールは SupportsShouldProcess 宣言と ShouldProcess コールの不一致を検出します。
コマンドレットが SupportsShouldProcess 属性を宣言する際、 ShouldProcess メソッドも呼び出すべきです。
違反は以下の場合に発生します:
- 関数は
SupportsShouldProcessを宣言しますが、呼び出しはしませんShouldProcess - 関数は
ShouldProcessを呼び出しますが宣言しませんSupportsShouldProcess
この違反を修正するには、 ShouldProcess 呼び出しが SupportsShouldProcess 属性宣言とペアリングされていることを確認してください。
詳細については、以下の記事を参照してください。
- about_Functions_Advanced_Methods
- 関数のコマンドレット バインディング属性について (about_Functions_CmdletBindingAttribute)
- ShouldProcessについて知りたいすべてのこと
例
非準拠
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の使用に関する「抑制ルール」セクションをご覧ください。