重症度レベル:警告
デフォルト状態:無効化
説明
このルールは、実行時のエラーを引き起こすパラメータセットの命名や設定の問題が一貫していないことを検出します。 PowerShellのパラメータセット名は、他の多くのPowerShell要素とは異なり、大文字を区別しています。 このルールを有効にすると、関数のデバッグがより簡単になります。 このルールはデフォルトで 無効 化されています。
このルールは5つの異なるチェックを行います。
- DefaultParameterSetNameが不足 している - パラメータセットが使われているがデフォルトが指定されていないと警告します。
- 複数パラメータ宣言 - 同じパラメータセット内で複数回宣言されたパラメータを検出します。 この問題はランタイム例外となり、このチェックでより早く検出されます。
- DefaultParameterSetNameとParameterSetNameのケースミスマッチ - ケースの一貫性を保証します。
- 異なるParameterSetName値間のケースミスマッチ - 同じパラメータセットへのすべての参照が同一のケースを使用することを保証します。
- パラメータセット名に改行線を含む - パラメータセット名に改行文字を使うことを警告します。
Guidance
- 複数のパラメータセットを定義する際には、
DefaultParameterSetNameを使います -
DefaultParameterSetName値とParameterSetName値のケーシングが一貫していることを確認しましょう - 同じパラメータセット名へのすべての参照に対して同一のケーシングを使用します
- 同じパラメータを単一のパラメータセット内で複数回宣言するのは避けてください
- パラメータセット名に改行文字は使わないでください
メモ
- コード内でパラメータセット名が最初に現れる場合は、正準ケーシングとして扱われます
-
[Parameter()]属性を持たないパラメータは、すべてのパラメータセットに自動的に含まれます - パラメータセットを使う際には、必ず
DefaultParameterSetNameを指定するのがPowerShellのベストプラクティスです
例
非準拠
# Missing DefaultParameterSetName
function Get-Data {
[CmdletBinding()]
param(
[Parameter(ParameterSetName='ByName')]
[string]$Name,
[Parameter(ParameterSetName='ByID')]
[int]$ID
)
}
# Case mismatch between DefaultParameterSetName and ParameterSetName
function Get-Data {
[CmdletBinding(DefaultParameterSetName='ByName')]
param(
[Parameter(ParameterSetName='byname')]
[string]$Name,
[Parameter(ParameterSetName='ByID')]
[int]$ID
)
}
# Inconsistent casing between ParameterSetName values
function Get-Data {
[CmdletBinding(DefaultParameterSetName='ByName')]
param(
[Parameter(ParameterSetName='ByName')]
[string]$Name,
[Parameter(ParameterSetName='byname')]
[string]$DisplayName
)
}
# Multiple parameter declarations in same set
function Get-Data {
param(
[Parameter(ParameterSetName='ByName')]
[Parameter(ParameterSetName='ByName')]
[string]$Name
)
}
# Parameter set name with newline
function Get-Data {
param(
[Parameter(ParameterSetName="Set`nOne")]
[string]$Name
)
}
対応
# Proper parameter set configuration
function Get-Data {
[CmdletBinding(DefaultParameterSetName='ByName')]
param(
[Parameter(ParameterSetName='ByName', Mandatory)]
[string]$Name,
[Parameter(ParameterSetName='ByName')]
[Parameter(ParameterSetName='ByID')]
[string]$ComputerName,
[Parameter(ParameterSetName='ByID', Mandatory)]
[int]$ID
)
}
ルールの設定
Rules = @{
PSUseConsistentParameterSetName = @{
Enable = $true
}
}
パラメーター
Enable
このパラメータは、ScriptAnalyzerがこのルールに対してコードをチェックするかどうかを制御します。 ブール値も受け入れます。 このルールを有効にするには、このパラメータを $trueに設定します。 既定値は $false です。