PSScriptAnalyzer の規則と推奨事項

次のガイドラインは、PowerShell チームとコミュニティの両方の取り組みに基づくものです。 ガイドラインは種類別に整理されています。 各タイプにはルールのリストがあります。 ルールは、PSScriptAnalyzer ルールの実装で定義 重大度によってグループ化されます。 TBDと表示された重症度は「未定」を意味します。TBDとラベル付けされているアイテムは、現在ルールが定義されていない推奨事項です。

コマンドレットの設計規則

重大度: エラー

ルールが定義されていません。

重大度: 警告

  • UseApprovedVerbs 承認済み動詞のみを使用する
  • AvoidReservedCharInCmdlet 使用できない文字を持つコマンドレット名
  • AvoidReservedParams 使用できないパラメーター名
  • UseShouldProcessForStateChangingFunctions と UseSupportsShouldProcess 確認要求をサポートする
  • ShouldProcess 属性が存在する場合は ShouldProcess 呼び出す必要があります。また、UseShouldProcess 呼び出す必要があります。
  • UseSingularNouns 名詞は単数形にする必要があります
  • MissingModuleManifestField 不足しているモジュール マニフェスト フィールド
    • バージョン
    • Author
    • 説明
    • LicenseUri (PowerShell ギャラリー用)
  • AvoidDefaultValueSwitchParameter スイッチ パラメーターを既定で true にすることはできません

重大度: 情報

ルールが定義されていません。

重大度: TBD

  • 対話型セッション Force パラメーターをサポートします。 コマンドレットを対話形式で使用する場合は、常に Force パラメーターを指定して、プロンプトや入力行の読み取りなどの対話型アクションをオーバーライドします。 Forceパラメータは、非インタラクティブなスクリプトやホストでコマンドレットを使えるようにするため重要です。
  • ドキュメント出力オブジェクト
  • モジュールは読み込み可能である必要があります
  • 構文エラーなし
  • 未解決の依存関係はエラーです
  • コマンドレットまたは PSCmdlet クラスから派生する
  • コマンドレット属性を指定する
  • 入力処理メソッドをオーバーライドする
  • OutputType 属性を指定する
  • パイプラインに 1 つのレコードを書き込む
  • コマンドレットで大文字と小文字を区別せず、大文字と小文字を区別しないようにする

スクリプト関数

重大度: エラー

ルールが定義されていません。

重大度: 警告

  • AvoidUsingCmdletAliases エイリアスの使用を避ける
  • AvoidUsingWMICmdlet 非推奨の WMI コマンドレットの使用を避ける
  • AvoidUsingEmptyCatchBlock 空の catch ブロックを使用しないでください
  • UseCmdletCorrectly 正しいパラメーターを使用して既存のコマンドレットを呼び出す
  • コマンドレットには、特定のシステム変更動詞 (Update、Set、Remove、New) を使用する場合は、ShouldProcessShouldContinue と force パラメーターを する必要があります。useShouldProcessForStateChangingFunctions
  • AvoidUsingPositionalParameters 位置指定パラメーターの使用を避ける
  • AvoidGlobalVars グローバル変数の使用を避ける
  • 宣言された変数は、UseDeclaredVarsMoreThanAssignments 代入後に使用する必要
  • AvoidUsingInvokeExpression 使用しないでください

重大度: 情報

ルールが定義されていません。

重大度: TBD

  • Clear-Host の使用を避ける
  • UNC ファイル パスの使用を避ける
  • エラー処理
    • コマンドレットを呼び出すときに -ErrorAction Stop を使用する
    • noncmdletを呼び出すときは $ErrorActionPreference を Stop または Continue に設定してください
    • フラグを使用してエラーを処理しないようにする
    • $? の使用を避ける
    • エラー条件として null 変数のテストを避ける
    • $Error[0] を独自の変数にコピーする
  • スクリプトでパイプラインを使用しないようにする
  • 戻り値の型が宣言されている場合、コマンドレットはその型を返す必要があります。 型が返される場合は、戻り値の型を宣言する必要があります。

スクリプティング スタイル

重大度: エラー

ルールが定義されていません。

重大度: 警告

  • AvoidUsingWriteHost ホストへの書き込みが必要な場合を除き、 の使用は避けてください

重大度: 情報

  • ProvideCommentHelp コメントベースのヘルプを記述する

重大度: TBD

  • 使用例を指定する
  • ツールの動作の詳細については、「メモ」セクションを使用してください
  • エクスポートされるすべてのコマンドにはヘルプが必要です (パラメーター ドキュメントを含む)
  • スクリプトが記述された PowerShell のバージョンを文書化する
  • コードをインデントする
  • バックティックを回避する

スクリプトのセキュリティ

重大度: エラー

  • AvoidUsingPlainTextForPassword プレーン テキスト パスワードの使用を避ける
  • パラメーターと パラメーターを使用しないでください (代わりに PSCredential 使用します)。 UsePSCredentialType
  • -ComputerName パラメーター引数のハードコーディングを回避する (情報漏えい): avoidUsingComputerNameHardcoded
  • プレーンテキスト (情報漏えい) で ConvertTo-SecureString を使用しないでください。 AvoidUsingConvertToSecureStringWithPlainText

重大度: 警告

重大度: 情報

ルールが定義されていません。

重大度: TBD

  • APIキーや認証情報変数の初期化を避ける(情報開示)

重大度: エラー

  • StandardDSCFunctionsInResource 標準 DSC メソッドを使用する
  • UseIdenticalMandatoryParametersForDSC すべての DSC メソッドに同じ必須パラメーターを使用する
  • UseIdenticalParametersForDSC Set および Test DSC メソッドに同じパラメーターを使用する

重大度: 警告

ルールが定義されていません。

重大度: 情報

  • 次の 3 つの推奨事項は、ReturnCorrectTypesForDSCFunctions 規則で説明されています
    • Set-TargetResource または Set (クラス ベース) 関数からオブジェクトを返さないようにする
    • Test-TargetResource または Test (クラス ベース) 関数からブール値を返します。
    • Get-TargetResource または Get (クラス ベース) 関数からオブジェクトを返す
  • DSC リソースには DSCTestsPresent DSC テストが必要です
  • DSC リソースには DSCExamplesPresent DSC の例が必要です

重大度: TBD

  • Windows PowerShell v4では、リソースモジュールごとに各リソースに対して .psd1 と schema.mof ファイルを持つべきです
  • リソース モジュールには、 ファイル (常に) と (非クラス リソースの場合) が必要です。問題 116 参照してください
  • リソースモジュールにはリソースを含むDscResourcesフォルダが必要です。詳細は問題#130を参照してください。
  • MOF には各要素の説明が必要です。問題 #131 を参照してください
  • Set DSC メソッド ShouldProcess を使用する

参照