UseCompatibleCmdlets

重大度レベル: 警告

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

形容

このルールは、対象となるPowerShellエディション、バージョン、OSで利用できないコマンドレットを検出します。 このルールは、スクリプト内の各コマンドレットをPSScriptAnalyzerに付属する互換性許容リストと比較します。 これらのファイルは以下の場所にあります: /path/to/PSScriptAnalyzerModule/Settings

各ファイルは以下の命名形式を使用しています:

<psedition>-<psversion>-<os>.json

Where:

  • <psedition>Core または Desktop
  • <psversion> はPowerShellのバージョンです
  • <os>WindowsLinuxLinux-Arm、または MacOS です

ルールの設定

スクリプトがWindowsのPowerShell Core 6.1と互換性があるかを確認するには、以下の設定を追加してください:

@{
    'Rules' = @{
        'PSUseCompatibleCmdlets' = @{
            'compatibility'      = @('core-6.1.0-windows')
        }
    }
}

互換性パラメータは、以下のような1つ以上のターゲット識別子のリストを受け入れます。

  • desktop-2.0-windows
  • desktop-3.0-windows
  • desktop-4.0-windows(Windows Server 2012 R2より取得)
  • desktop-5.1.14393.206-windows
  • core-6.1.0-windows(Windows 10、バージョン1803より)
  • core-6.1.0-linux (Ubuntu 18.04 から取得)
  • core-6.1.0-linux-arm (Raspbian から取得)
  • core-6.1.0-macos

パッチ適用されたPowerShellのバージョンは通常同じコマンドレットデータを持つため、このルールは主にメジャーとマイナーのバージョンプロファイルを配布します。

また、 New-CommandDataFile.ps1でカスタムプロフィールを作成することもできます。 生成されたJSONファイルをSettingsモジュールのPSScriptAnalyzerフォルダに入れます。 その後、 compatibilityでファイル名で参照できます。

PowerShell 6.0が終了したため、PSScriptAnalyzer 1.18で core-6.0.2-* ファイルは削除されました。

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

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