Invoke-ScriptAnalyzer
選択したベスト プラクティス ルールに基づいてスクリプトまたはモジュールを評価します
構文
Invoke-ScriptAnalyzer
[-Path] <string>
[-CustomRulePath <string[]>]
[-RecurseCustomRulePath]
[-IncludeDefaultRules]
[-ExcludeRule <string[]>]
[-IncludeRule <string[]>]
[-Severity <string[]>]
[-Recurse]
[-SuppressedOnly]
[-Fix]
[-EnableExit]
[-Settings <Object>]
[-SaveDscDependency]
[-ReportSummary]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Invoke-ScriptAnalyzer
[-Path] <string>
-IncludeSuppressed
[-CustomRulePath <string[]>]
[-RecurseCustomRulePath]
[-IncludeDefaultRules]
[-ExcludeRule <string[]>]
[-IncludeRule <string[]>]
[-Severity <string[]>]
[-Recurse]
[-Fix]
[-EnableExit]
[-Settings <Object>]
[-SaveDscDependency]
[-ReportSummary]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Invoke-ScriptAnalyzer
[-ScriptDefinition] <string>
-IncludeSuppressed
[-CustomRulePath <string[]>]
[-RecurseCustomRulePath]
[-IncludeDefaultRules]
[-ExcludeRule <string[]>]
[-IncludeRule <string[]>]
[-Severity <string[]>]
[-Recurse]
[-EnableExit]
[-Settings <Object>]
[-SaveDscDependency]
[-ReportSummary]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Invoke-ScriptAnalyzer
[-ScriptDefinition] <string>
[-CustomRulePath <string[]>]
[-RecurseCustomRulePath]
[-IncludeDefaultRules]
[-ExcludeRule <string[]>]
[-IncludeRule <string[]>]
[-Severity <string[]>]
[-Recurse]
[-SuppressedOnly]
[-EnableExit]
[-Settings <Object>]
[-SaveDscDependency]
[-ReportSummary]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
説明
Invoke-ScriptAnalyzer
は、ベスト プラクティス ルールのコレクションに基づいてスクリプトまたはモジュール ファイル (.ps1
、、 .psm1
および .psd1
ファイル) を評価し、ルール違反を表すオブジェクトを返します。 また、DSC リソースを分析するための特別なルールも含まれています。
Invoke-ScriptAnalyzer
には、一連の組み込みルールが付属しています。 既定では、すべてのルールが使用されます。
IncludeRule パラメーターと ExcludeRule パラメーターを使用して、必要なルールを選択できます。 コマンドレットを Get-ScriptAnalyzerRule
使用して、評価に含める規則または評価から除外する規則を調べて選択できます。
また、PowerShell スクリプトで記述するカスタマイズされた規則を使用したり、C# を使用してアセンブリでコンパイルしたりすることもできます。 カスタム ルールは、 IncludeRule パラメーターと ExcludeRule パラメーターを使用して選択することもできます。
分析にルールを含めることもできますが、選択した関数またはスクリプトに対するそのルールの出力は抑制できます。 この機能は、必要な場合にのみ使用する必要があります。 抑制されたルールを取得するには、SuppressedOnly パラメーターを指定して を実行Invoke-ScriptAnalyzer
します。
CI システムで使用する場合、 EnableExit はエラー レコードの数と同じ終了コードでシェルを終了します。
例
例 1 - スクリプトに対してすべてのスクリプト アナライザー ルールを実行する
Invoke-ScriptAnalyzer -Path C:\Scripts\Get-LogData.ps1
例 2 - Modules ディレクトリ内のすべてのファイルに対してスクリプト アナライザーのすべてのルールを実行する
この例では、ユーザー ベースModules
のディレクトリとそのサブディレクトリ内のすべての ファイルと .psm1
ファイルに対して、すべての .ps1
Script Analyzer ルールを実行します。
Invoke-ScriptAnalyzer -Path $home\Documents\WindowsPowerShell\Modules -Recurse
例 3 - モジュールで 1 つのルールを実行する
次の使用例は、モジュール フォルダー内PSDiagnostics
のファイルに対して PSAvoidUsingPositionalParameters ルールのみを実行します。 このようなコマンドを使用して、特定のルール違反のすべてのインスタンスを検索できます。
Invoke-ScriptAnalyzer -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDiagnostics -IncludeRule PSAvoidUsingPositionalParameters
例 4 - モジュールで 2 つを除くすべてのルールを実行する
この例では、 ディレクトリとそのサブディレクトリの ファイルと .psm1
ファイルで PSAvoidUsingCmdletAliases と PSAvoidUsingInternalURLs を.ps1
除くすべての規則をMyModules
実行します。
Invoke-ScriptAnalyzer -Path C:\ps-test\MyModule -Recurse -ExcludeRule PSAvoidUsingCmdletAliases, PSAvoidUsingInternalURLs
例 5 - カスタム 規則を使用してスクリプト アナライザーを実行する
この例では、パス内の標準の規則と規則を使用して、Script Analyzer を C:\CommunityAnalyzerRules
でTest-Script.ps1
実行します。
Invoke-ScriptAnalyzer -Path D:\test_scripts\Test-Script.ps1 -CustomRulePath C:\CommunityAnalyzerRules -IncludeDefaultRules
例 6 - エラーの重大度で PSDSC ソース名を持つルールのみを実行する
$DSCError = Get-ScriptAnalyzerRule -Severity Error | Where SourceName -eq PSDSC
$Path = "$home\Documents\WindowsPowerShell\Modules\MyDSCModule"
Invoke-ScriptAnalyzerRule -Path $Path -IncludeRule $DSCError -Recurse
例 7 - ルール違反の抑制
この例では、関数内のルール違反の報告を抑制する方法と、抑制されているルール違反を検出する方法を示します。
この例では、 属性を SuppressMessageAttribute
使用して、スクリプト内の関数の PSUseSingularNouns および PSAvoidUsingCmdletAliases ルール Get-Widgets
を Get-Widgets.ps1
抑制します。
この属性を使用すると、モジュール、スクリプト、クラス、関数、パラメーター、または行のルールを抑制できます。
最初のコマンドは、 関数を含むスクリプト ファイルで Script Analyzer を実行します。 出力はルール違反を報告します。 さらに多くのルールに違反しても、抑制されたルールは報告されません。
function Get-Widgets
{
[CmdletBinding()]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingCmdletAliases", "", Justification="Resolution in progress.")]
Param()
dir $pshome
...
}
Invoke-ScriptAnalyzer -Path .\Get-Widgets.ps1
RuleName Severity FileName Line Message
-------- -------- -------- ---- -------
PSProvideCommentHelp Information ManageProf 14 The cmdlet 'Get-Widget' does not have a help comment.
iles.psm1
Invoke-ScriptAnalyzer -Path .\Get-Widgets.ps1 -SuppressedOnly
Rule Name Severity File Name Line Justification
--------- -------- --------- ---- -------------
PSAvoidUsingCmdletAliases Warning ManageProf 21 Resolution in progress.
iles.psm1
PSUseSingularNouns Warning ManageProf 14
iles.psm1
2 番目のコマンドでは、 SuppressedOnly パラメーターを使用して、抑制されたスクリプト ファイルの規則違反を報告します。
例 8 - プロファイル定義を使用してスクリプト ファイルを分析する
この例では、スクリプト アナライザー プロファイルを作成し、現在の ScriptAnalyzerProfile.txt
ディレクトリの ファイルに保存します。
BitLocker モジュール ファイルでを実行Invoke-ScriptAnalyzer
します。
Profile パラメーターの値は、スクリプト アナライザー プロファイルへのパスです。
# In .\ScriptAnalyzerProfile.txt
@{
Severity = @('Error', 'Warning')
IncludeRules = 'PSAvoid*'
ExcludeRules = '*WriteHost'
}
Invoke-ScriptAnalyzer -Path $pshome\Modules\BitLocker -Profile .\ScriptAnalyzerProfile.txt
コマンド-Severity Error
に など、競合するパラメーターをInvoke-ScriptAnalyzer
含める場合、コマンドレットはプロファイル値を使用し、 パラメーターを無視します。
例 9 - 文字列として格納されているスクリプトを分析する
この例では、 ScriptDefinition パラメーターを使用して、コマンド ラインで関数を分析します。 関数文字列は引用符で囲まれています。
Invoke-ScriptAnalyzer -ScriptDefinition "function Get-Widgets {Write-Host 'Hello'}"
RuleName Severity FileName Line Message
-------- -------- -------- ---- -------
PSAvoidUsingWriteHost Warning 1 Script
because
there i
suppres
Write-O
PSUseSingularNouns Warning 1 The cmd
noun sh
ScriptDefinition パラメーターを使用する場合、DiagnosticRecord オブジェクトの FileName プロパティは です$null
。
パラメーター
-Confirm
コマンドレットの実行前に確認を求めるメッセージが表示されます。
型: | SwitchParameter |
Aliases: | cf |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CustomRulePath
ルールを定義するファイルへのパス、またはルールを定義するファイルを含むディレクトリを入力します。
ワイルドカード文字がサポートされています。
CustomRulePath を指定すると、指定したパスで見つかったカスタム 規則のみが分析に使用されます。 でルールが見つからない場合 Invoke-ScriptAnalyzer
は、通知なしに標準ルールが実行されます。
パスのサブディレクトリに定義されているルールを追加するには、 RecurseCustomRulePath パラメーターを 使用します。 組み込みのルールを含めるには、 IncludeDefaultRules パラメーターを 追加します。
型: | String[] |
Aliases: | CustomizedRulePath |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-EnableExit
分析が完了すると、このパラメーターは PowerShell セッションを終了し、エラー レコードの数と同じ終了コードを返します。 これは、継続的インテグレーション (CI) パイプラインで役立ちます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ExcludeRule
Script Analyzer テストから指定した規則を省略します。 ワイルドカード文字がサポートされています。
ルール名のコンマ区切りのリスト、ルール名を含む変数、またはルール名を取得するコマンドを入力します。 スクリプト アナライザー プロファイル ファイルで、除外されたルールの一覧を指定することもできます。 カスタム ルール パスでは、標準ルールとルールを除外できます。
ルールを除外しても、パス内のどのファイルでもルールは実行されません。 特定の行、パラメーター、関数、スクリプト、またはクラスでルールを除外するには、Path パラメーターを調整するか、ルールを抑制します。 ルールの抑制の詳細については、例を参照してください。
ExcludeRule コレクションと IncludeRule コレクションの両方でルールが指定されている場合、ルールは除外されます。
型: | String[] |
配置: | Named |
規定値: | All rules are included. |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-Fix
DiagnosticRecord に修正プログラムが含まれる特定の警告を修正します。
Fix を使用した場合は、Invoke-ScriptAnalyzer
分析を実行する前に修正プログラムを適用します。 このパラメーターを使用する場合は、ファイルのバックアップがあることを確認します。 ファイル エンコードを保持しようとしますが、エンコードが変更される場合もあります。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-IncludeDefaultRules
カスタム 規則と共に既定の規則を呼び出します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-IncludeRule
スクリプト アナライザー テストで指定された規則のみを実行します。 既定では、PSScriptAnalyzer はすべてのルールを実行します。
ルール名のコンマ区切りのリスト、ルール名を含む変数、またはルール名を取得するコマンドを入力します。 ワイルドカード文字がサポートされています。 スクリプト アナライザー プロファイル ファイルでルール名を指定することもできます。
CustomizedRulePath パラメーターを使用する場合は、このパラメーターを使用して、カスタム 規則パスに標準の規則と規則を含めることができます。
ExcludeRule コレクションと IncludeRule コレクションの両方でルールが指定されている場合、ルールは除外されます。
Severity パラメーターは IncludeRule よりも優先されます。 たとえば、Severity が の場合、Error
IncludeRule を使用してルールをWarning
含めることはできません。
型: | String[] |
配置: | Named |
規定値: | All rules are included. |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-IncludeSuppressed
出力に抑制された診断を含めます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Path
分析するスクリプトまたはモジュールへのパスを指定します。 ワイルドカード文字がサポートされています。
スクリプト () またはモジュール ファイル.psm1
(.ps1
) へのパス、またはスクリプトまたはモジュールを含むディレクトリへのパスを入力します。 ディレクトリに他の種類のファイルが含まれている場合、それらは無視されます。
指定したパスのルート ディレクトリにないファイルを分析するには、ワイルドカード文字 (C:\Modules\MyModule\*
) または Recurse パラメーターを使用します。
型: | String |
Aliases: | PSPath |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | True |
-Recurse
Path ディレクトリ内のファイルとすべてのサブディレクトリに対して Script Analyzer を再帰的に実行します。
再帰は、Path パラメーター値にのみ適用されます。 CustomRulePath を再帰的に検索するには、RecurseCustomRulePath パラメーターを使用します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-RecurseCustomRulePath
CustomRulePath の場所のサブディレクトリで定義されている規則を追加します。 既定では、 では、 Invoke-ScriptAnalyzer
指定したファイルまたはディレクトリで定義されているカスタム規則のみが使用されます。 組み込みの規則を含めるには、 IncludeDefaultRules パラメーターを 使用します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ReportSummary
ホストに見つかった違反の概要を書き込みます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SaveDscDependency
DSC リソースの依存関係を解決します。
このパラメーターを指定して を実行すると Invoke-ScriptAnalyzer
、 の Import-DSCResource -ModuleName <somemodule>
インスタンスが検索されます。 を検索して が見つからない場合<somemodule>
は、$env:PSModulePath
Invoke-ScriptAnalyzer
解析エラーが返されます。 このエラーは、PowerShell パーサーが のシンボル <somemodule>
を見つけることができなかったことが原因で発生します。
Invoke-ScriptAnalyzer
PowerShell ギャラリーでモジュールが見つかると、不足しているモジュールが一時パスにダウンロードされます。 その後、スキャンの間、一時パスが に $env:PSModulePath
追加されます。
一時場所は にあります $LOCALAPPDATA/PSScriptAnalyzer/TempModuleDir
。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ScriptDefinition
文字列内のコマンド、関数、または式に対して分析を実行します。 この機能を使用すると、スクリプト コンテキストに関係なく、ステートメント、式、および関数を分析できます。
型: | String |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Settings
ScriptAnalyzer の設定を含むユーザー定義プロファイルまたはハッシュテーブル オブジェクトを含むファイルへのパス。
ファイルまたはハッシュテーブルで指定されたパラメーターと値を使用して実行 Invoke-ScriptAnalyzer
します。
ファイルまたはハッシュテーブルのパスまたはコンテンツが無効な場合は無視されます。 プロファイル内のパラメーターと値は、コマンド ラインで指定されたのと同じパラメーターと値よりも優先されます。
Script Analyzer プロファイル ファイルは、次のキーの 1 つ以上を含むハッシュテーブルを含むテキスト ファイルです。
- CustomRulePath
- ExcludeRules
- IncludeDefaultRules
- IncludeRules
- RecurseCustomRulePath
- ルール
- 重大度
プロファイル内のキーと値は、スプラッティングと同様に、 の Invoke-ScriptAnalyzer
標準パラメーターと値であるかのように解釈されます。 詳細については、「 about_Splatting」を参照してください。
型: | Object |
Aliases: | Profile |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Severity
すべてのルールで Script Analyzer を実行した後、このパラメーターは、指定された重大度の規則違反を選択します。
有効な値は次のとおりです。
- エラー
- 警告
- 情報。
1 つ以上の重大度値を指定できます。
パラメーターは、すべてのルールを実行した後にのみルール違反をフィルター処理します。 ルールを効率的にフィルター処理するには、 を使用 Get-ScriptAnalyzerRule
して、実行するルールを選択します。
Severity パラメーターは IncludeRule よりも優先されます。 たとえば、重大度が の場合、Error
IncludeRule を使用してルールをWarning
含めることはできません。
型: | String[] |
配置: | Named |
規定値: | All rule violations |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SuppressedOnly
抑制されたルールに対してのみ違反を返します。
SuppressedRecord オブジェクト (Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord) を返します。
ルールを抑制するには、 SuppressMessageAttribute を使用します。 詳細については、例を参照してください。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-WhatIf
コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。
型: | SwitchParameter |
Aliases: | wi |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
None
パイプを使用してこのコマンドレットに入力を渡すことはできません。
出力
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord
既定では、 Invoke-ScriptAnalyzer
はルール違反ごとに 1 つの DiagnosticRecord オブジェクトを返します。
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord
SuppressedOnly パラメーターを使用する場合は、Invoke-ScriptAnalyzer
代わりに SuppressedRecord オブジェクトを返します。
関連リンク
PowerShell