共用方式為


Invoke-ScriptAnalyzer

根據選取的最佳做法規則評估腳本或模組

語法

Path_SuppressedOnly (預設值)

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>]

Path_IncludeSuppressed

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>]

ScriptDefinition_IncludeSuppressed

Invoke-ScriptAnalyzer
    [-ScriptDefinition] <string>
    -IncludeSuppressed
    [-CustomRulePath <string[]>]
    [-RecurseCustomRulePath]
    [-IncludeDefaultRules]
    [-ExcludeRule <string[]>]
    [-IncludeRule <string[]>]
    [-Severity <string[]>]
    [-Recurse]
    [-EnableExit]
    [-Settings <Object>]
    [-SaveDscDependency]
    [-ReportSummary]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ScriptDefinition_SuppressedOnly

Invoke-ScriptAnalyzer
    [-ScriptDefinition] <string>
    [-CustomRulePath <string[]>]
    [-RecurseCustomRulePath]
    [-IncludeDefaultRules]
    [-ExcludeRule <string[]>]
    [-IncludeRule <string[]>]
    [-Severity <string[]>]
    [-Recurse]
    [-SuppressedOnly]
    [-EnableExit]
    [-Settings <Object>]
    [-SaveDscDependency]
    [-ReportSummary]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

Invoke-ScriptAnalyzer 會根據最佳做法規則的集合評估腳本或模組檔案(.ps1.psm1.psd1 檔案),並傳回代表規則違規的物件。 它也包含分析 DSC 資源的特殊規則。

Invoke-ScriptAnalyzer 隨附一組內建規則。 根據預設,它會使用所有規則。 您可以使用 IncludeRuleExcludeRule 參數來選取您想要的規則。 您可以使用 Get-ScriptAnalyzerRule Cmdlet 來檢查並選取您想要在評估中包含或排除的規則。

您也可以使用在PowerShell腳本中撰寫的自定義規則,或使用 C# 在元件中編譯。 您也可以使用 IncludeRuleExcludeRule 參數來選取自定義規則。

您也可以在分析中包含規則,但隱藏所選函式或腳本的該規則輸出。 這項功能應該只在必要時使用。 若要取得已隱藏的規則,請使用 Invoke-ScriptAnalyzer 參數執行

針對 CI 系統中的使用方式,EnableExit 結束殼層,結束代碼等於錯誤記錄數目。

範例

範例 1 - 在文稿上執行所有腳本分析器規則

Invoke-ScriptAnalyzer -Path C:\Scripts\Get-LogData.ps1

範例 2 - 在 Modules 目錄中的所有檔案上執行所有腳本分析器規則

本範例會在使用者型 .ps1 目錄及其子目錄中的所有 .psm1Modules 檔案上執行所有腳本分析器規則。

Invoke-ScriptAnalyzer -Path $home\Documents\WindowsPowerShell\Modules -Recurse

範例 3 - 在模組上執行單一規則

此範例只會在 模組資料夾中的檔案上執行 PSDiagnostics 規則。 您可以使用類似下列的命令來尋找特定規則違規的所有實例。

Invoke-ScriptAnalyzer -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDiagnostics -IncludeRule PSAvoidUsingPositionalParameters

範例 4 - 在您的模組上執行兩個以外的所有規則

此範例會執行除了 PSAvoidUsingCmdletAliasesPSAvoidUsingInternalURLs 以外的所有規則,.ps1.psm1MyModules 目錄中的檔案及其子目錄中。

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

範例 5 - 使用自訂規則執行文本分析器

本範例會在 Test-Script.ps1 上執行腳本分析器,並在 C:\CommunityAnalyzerRules 路徑中使用標準規則和規則。

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 屬性來隱藏 PSUseSingularNounsPSAvoidUsingCmdletAliases 腳本 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

第二個命令會使用 SuppressedOnly 參數來報告隱藏腳本檔案的規則違規。

範例 8 - 使用設定檔定義分析文稿檔案

在此範例中,我們會建立腳本分析器配置檔,並將它儲存在目前目錄中的 ScriptAnalyzerProfile.txt 檔案中。 我們在 Invoke-ScriptAnalyzer 模組檔案上執行 Profile 參數的值是腳本分析器配置檔的路徑。

# In .\ScriptAnalyzerProfile.txt
@{
    Severity = @('Error', 'Warning')
    IncludeRules = 'PSAvoid*'
    ExcludeRules = '*WriteHost'
}

Invoke-ScriptAnalyzer -Path $pshome\Modules\BitLocker -Settings .\ScriptAnalyzerProfile.txt

如果您在 Invoke-ScriptAnalyzer 命令中包含衝突的參數,例如 -Severity Error,Cmdlet 會使用設定檔值並忽略 參數。

範例 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

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:cf

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-CustomRulePath

輸入定義規則的檔案路徑,或包含定義規則之檔案的目錄。 支援通配符。 指定 CustomRulePath 時,只會使用指定路徑中找到的自定義規則來進行分析。 如果 Invoke-ScriptAnalyzer 在中找不到規則,它會執行標準規則而不通知。

若要新增路徑子目錄中定義的規則,請使用 RecurseCustomRulePath 參數。 若要包含內建規則,請新增 IncludeDefaultRules 參數。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:True
不要顯示:False
別名:自訂規則路徑

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-EnableExit

完成分析時,此參數會結束PowerShell工作階段,並傳回等於錯誤記錄數目的結束代碼。 這在持續整合 (CI) 管線中很有用。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-ExcludeRule

省略文本分析器測試中的指定規則。 支援通配符。

輸入以逗號分隔的規則名稱清單、包含規則名稱的變數,或取得規則名稱的命令。 您也可以在文稿分析器設定檔檔中指定排除規則的清單。 您可以在自訂規則路徑中排除標準規則和規則。

當您排除規則時,規則不會在路徑中的任何檔案上執行。 若要排除特定行、參數、函式、腳本或類別的規則,請調整 Path 參數或隱藏規則。 如需隱藏規則的相關信息,請參閱範例。

如果在 ExcludeRuleIncludeRule 集合中指定規則,則會排除規則。

參數屬性

類型:

String[]

預設值:All rules are included.
支援萬用字元:True
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Fix

修正在其 DiagnosticRecord中包含修正的特定警告。

當您使用 Fix時,Invoke-ScriptAnalyzer 在執行分析之前套用修正程式。 使用此參數時,請確定您有檔案的備份。 它會嘗試保留檔案編碼,但仍有一些編碼可以變更的情況。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

Path_SuppressedOnly
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
Path_IncludeSuppressed
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-IncludeDefaultRules

叫用預設規則以及自定義規則。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-IncludeRule

只在文稿分析器測試中執行指定的規則。 根據預設,PSScriptAnalyzer 會執行所有規則。

輸入以逗號分隔的規則名稱清單、包含規則名稱的變數,或取得規則名稱的命令。 支援通配符。 您也可以在文稿分析器設定檔檔中指定規則名稱。

當您使用 CustomRulePath 參數時,您可以使用此參數在自定義規則路徑中包含標準規則和規則。

如果在 ExcludeRuleIncludeRule 集合中指定規則,則會排除規則。

嚴重性 參數的優先順序高於 includeRule 。 例如,如果 嚴重性Error,則您無法使用 IncludeRule 來包含 Warning 規則。

參數屬性

類型:

String[]

預設值:All rules are included.
支援萬用字元:True
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-IncludeSuppressed

在輸出中包含隱藏的診斷。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

Path_IncludeSuppressed
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ScriptDefinition_IncludeSuppressed
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Path

指定要分析之文稿或模組的路徑。 支援通配符。

輸入文稿的路徑(.ps1)或模組檔案(.psm1),或輸入包含腳本或模組的目錄。 如果目錄包含其他類型的檔案,則會忽略它們。

若要分析不在指定路徑根目錄中的檔案,請使用通配符 (C:\Modules\MyModule\*) 或 Recurse 參數。

參數屬性

類型:String
預設值:None
支援萬用字元:True
不要顯示:False
別名:PSPath

參數集

Path_SuppressedOnly
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
Path_IncludeSuppressed
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-Recurse

Path 目錄和所有子目錄中的檔案上執行腳本分析器。

Recurse 僅適用於 Path 參數值。 若要以遞歸方式搜尋 CustomRulePath,請使用 RecurseCustomRulePath 參數。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-RecurseCustomRulePath

新增在 customRulePath 位置 子目錄中定義的規則。 根據預設,Invoke-ScriptAnalyzer 只會使用指定檔案或目錄中定義的自定義規則。 若要包含內建規則,請使用 includeDefaultRules 參數

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-ReportSummary

將發現違規的摘要寫入主機。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position: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
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-ScriptDefinition

在字串中的命令、函式或表達式上執行分析。 您可以使用此功能來分析語句、表達式和函式,與其腳本內容無關。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

ScriptDefinition_IncludeSuppressed
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
ScriptDefinition_SuppressedOnly
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-Settings

包含使用者定義配置檔的檔案路徑,或包含 ScriptAnalyzer 設定的哈希表物件。

使用檔案或哈希表中指定的參數和值執行 Invoke-ScriptAnalyzer

如果檔案或哈希表的路徑或內容無效,則會忽略它。 配置檔中的參數和值優先於命令列中指定的相同參數和值。

文稿分析器配置檔案是文本檔,其中包含具有下列一或多個索引鍵的哈希表:

  • CustomRulePath
  • ExcludeRules
  • IncludeDefaultRules
  • IncludeRules
  • RecurseCustomRulePath
  • 規則
  • 嚴重程度

配置檔中的索引鍵和值會解譯為標準參數和 Invoke-ScriptAnalyzer的值,類似於展開。 如需詳細資訊,請參閱 about_Splatting

參數屬性

類型:Object
預設值:None
支援萬用字元:False
不要顯示:False
別名:個人檔案

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Severity

使用所有規則執行文本分析器之後,此參數會選取具有指定嚴重性的規則違規。

有效值為:

  • 錯誤
  • 警告
  • 資訊。

您可以指定一個以上的嚴重性值。

參數只會在執行所有規則之後篩選規則違規。 若要有效率地篩選規則,請使用 Get-ScriptAnalyzerRule 來選取您想要執行的規則。

嚴重性 參數的優先順序高於 includeRule 。 例如,如果 嚴重性Error,則您無法使用 IncludeRule 來包含 Warning 規則。

參數屬性

類型:

String[]

預設值:All rule violations
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-SuppressedOnly

只會針對隱藏的規則傳回違規。

會傳回 SuppressedRecord 物件(Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord)。

若要隱藏規則,請使用 SuppressMessageAttribute。 如需說明,請參閱範例。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

Path_SuppressedOnly
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
ScriptDefinition_SuppressedOnly
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 指令未執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:無線

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters

輸入

None

您無法使用管線將輸入傳送至此 Cmdlet。

輸出

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord

根據預設,Invoke-ScriptAnalyzer 會針對每個規則違規傳回一個 DiagnosticRecord 物件。

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord

如果您使用 SuppressedOnly 參數,Invoke-ScriptAnalyzer 會改為傳回 SuppressedRecord 物件。