AvoidOverwritingBuiltInCmdlets

重大度レベル: 警告

デフォルト状態:有効

形容

このルールは、スクリプトがターゲットとなるPowerShellバージョンとOS向けに利用可能な組み込みコマンドレットの名前を使う関数を定義した場合を検出し警告します。 組み込みのコマンドレット名を上書きすると、呼び出し者がプラットフォームのコマンドレットを期待したタイミングで関数を実行させてしまうため、混乱を招くことがあります。

このルールは、スクリプト内の関数宣言とPSScriptAnalyzerに付属するコマンド許可リストを比較します。 許可リストは他の互換性ルールでも使用されます。 詳しくは UseCompatibleCmdletsをご覧ください。

例

非準拠

function Get-ChildItem {
    param(
        [string]$Path = '.'
    )

    "Custom listing for: $Path"
}

対応

function Get-CustomChildItem {
    param(
        [string]$Path = '.'
    )

    "Custom listing for: $Path"
}

ルールの設定

WindowsのPowerShell Coreでスクリプトが互換性があるかどうかを確認するルールを有効にするには、設定ファイルに以下の行を追加してください。

@{
    Rules = @{
        PSAvoidOverwritingBuiltInCmdlets = @{
            Enable            = $true
            PowerShellVersion = @('core-7.0.0-windows')
        }
    }
}

パラメーター

PowerShellVersion

PowerShellVersionパラメータはPSScriptAnalyzerに付属する1つ以上のコマンド許可リスト名を受け入れます。 この値を検証したいPowerShellのバージョンとプラットフォームに設定します。

手記

PowerShell 7以降がインストールされている場合は PowerShellVersion のデフォルト値は core-7.0.0-windows 、インストールされていない場合は desktop-5.1.17763.316-windows です。

パッチ適用されたPowerShellリリースは通常同じコマンドレットメタデータを共有しているため、組み込みの許可リストはメジャーバージョンとマイナーバージョンごとに提供されます。 また、 New-CommandDataFile.ps1.でカスタム許可リストを作成することもできます。 カスタム許可リストを使用するには、生成されたJSONファイルをPSScriptAnalyzerモジュールのインストールパスの Settings フォルダに入れ、 PowerShellVersion をそのファイル名に設定します。

PowerShell 6.0のライフサイクル終了により、PSScriptAnalyzer 1.18で core-6.0.2-* ファイルは削除されました。