次のガイドラインは、PowerShell チームとコミュニティの両方の取り組みに基づくものです。 ガイドラインは種類別に整理されています。 各タイプにはルールのリストがあります。 ルールは、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) を使用する場合は、ShouldProcess
ShouldContinue と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
重大度: 警告
-
$Password = 'string'(情報漏えい) の使用は避けてください。 AvoidUsingUsernameAndPasswordParams
重大度: 情報
ルールが定義されていません。
重大度: TBD
- APIキーや認証情報変数の初期化を避ける(情報開示)
DSC 関連の規則
重大度: エラー
- 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 を使用する
参照
- コマンドレット開発ガイドライン
- PowerShell DSC リソースの設計とテストのチェックリスト
- DSC ガイドラインは、DSC リソース リポジトリにも記載されています。
- DSC リソース スタイルのガイドライン & ベスト プラクティス
- DSC リソースの名前付け を
する - 高品質 DSC リソース モジュールの作成
- 非公式の PowerShell のベスト プラクティスとスタイル ガイド を
する
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
PowerShell