次の方法で共有


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 ファイルで PSAvoidUsingCmdletAliasesPSAvoidUsingInternalURLs を.ps1除くすべての規則をMyModules実行します。

Invoke-ScriptAnalyzer -Path C:\ps-test\MyModule -Recurse -ExcludeRule PSAvoidUsingCmdletAliases, PSAvoidUsingInternalURLs

例 5 - カスタム 規則を使用してスクリプト アナライザーを実行する

この例では、パス内の標準の規則と規則を使用して、Script Analyzer を C:\CommunityAnalyzerRulesTest-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-WidgetsGet-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 が の場合、ErrorIncludeRule を使用してルールを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:PSModulePathInvoke-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 よりも優先されます。 たとえば、重大度が の場合、ErrorIncludeRule を使用してルールを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 オブジェクトを返します。