Invoke-ScriptAnalyzer
Utvärderar ett skript eller en modul baserat på valda regelverk
Syntax
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>]
Description
Invoke-ScriptAnalyzer
utvärderar skript eller modulfiler (.ps1
, .psm1
och .psd1
filer) baserat på en samling regelverk och returnerar objekt som representerar regelöverträdelser. Den innehåller även särskilda regler för att analysera DSC-resurser.
Invoke-ScriptAnalyzer
levereras med en uppsättning inbyggda regler. Som standard används alla regler. Du kan använda parametrarna IncludeRule och ExcludeRule för att välja de regler som du vill använda. Du kan använda cmdleten Get-ScriptAnalyzerRule
för att undersöka och välja de regler som du vill inkludera eller exkludera från utvärderingen.
Du kan också använda anpassade regler som du skriver i PowerShell-skript eller kompilera i sammansättningar med C#. Anpassade regler kan också väljas med parametrarna IncludeRule och ExcludeRule .
Du kan också inkludera en regel i analysen, men utelämna utdata från regeln för valda funktioner eller skript. Den här funktionen bör endast användas när det behövs. Om du vill hämta regler som har ignorerats kör Invoke-ScriptAnalyzer
du med parametern SuppressedOnly .
För användning i CI-system avslutar EnableExit gränssnittet med en slutkod som motsvarar antalet felposter.
Exempel
EXEMPEL 1 – Kör alla skriptanalysregler på ett skript
Invoke-ScriptAnalyzer -Path C:\Scripts\Get-LogData.ps1
EXEMPEL 2 – Kör alla script analyzer-regler på alla filer i katalogen Modules
Det här exemplet kör alla Script Analyzer-regler på alla .ps1
filer och .psm1
filer i din användarbaserade Modules
katalog och dess underkataloger.
Invoke-ScriptAnalyzer -Path $home\Documents\WindowsPowerShell\Modules -Recurse
EXEMPEL 3 – Köra en enskild regel i en modul
Det här exemplet kör endast regeln PSAvoidUsingPositionalParameters på filerna i modulmappen PSDiagnostics
. Du kan använda ett kommando som detta för att hitta alla instanser av en viss regelöverträdelse.
Invoke-ScriptAnalyzer -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDiagnostics -IncludeRule PSAvoidUsingPositionalParameters
EXEMPEL 4 – Kör alla regler utom två på dina moduler
Det här exemplet kör alla regler förutom PSAvoidUsingCmdletAliases och PSAvoidUsingInternalURLs på .ps1
filerna och .psm1
i MyModules
katalogen och i dess underkataloger.
Invoke-ScriptAnalyzer -Path C:\ps-test\MyModule -Recurse -ExcludeRule PSAvoidUsingCmdletAliases, PSAvoidUsingInternalURLs
EXEMPEL 5 – Kör Script Analyzer med anpassade regler
I det här exemplet körs Script Analyzer på Test-Script.ps1
med standardreglerna och reglerna i C:\CommunityAnalyzerRules
sökvägen.
Invoke-ScriptAnalyzer -Path D:\test_scripts\Test-Script.ps1 -CustomRulePath C:\CommunityAnalyzerRules -IncludeDefaultRules
EXEMPEL 6 – Kör endast de regler som är allvarlighetsgrad för fel och har PSDSC-källnamnet
$DSCError = Get-ScriptAnalyzerRule -Severity Error | Where SourceName -eq PSDSC
$Path = "$home\Documents\WindowsPowerShell\Modules\MyDSCModule"
Invoke-ScriptAnalyzerRule -Path $Path -IncludeRule $DSCError -Recurse
EXEMPEL 7 – Förhindra regelöverträdelser
Det här exemplet visar hur du undertrycker rapporteringen av regelöverträdelser i en funktion och hur du identifierar regelöverträdelser som undertrycks.
I exemplet används SuppressMessageAttribute
attributet för att undertrycka REGLERNA PSUseSingularNouns och PSAvoidUsingCmdletAliases för Get-Widgets
funktionen i skriptet Get-Widgets.ps1
.
Du kan använda det här attributet för att utelämna en regel för en modul, ett skript, en klass, en funktion, en parameter eller en rad.
Det första kommandot kör Script Analyzer på skriptfilen som innehåller funktionen . Utdata rapporterar en regelöverträdelse. Även om fler regler överträds rapporteras ingen av de undertryckta reglerna.
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
Det andra kommandot använder parametern SuppressedOnly för att rapportera överträdelser av reglerna som undertrycks av skriptfilen.
EXEMPEL 8 – Analysera skriptfiler med hjälp av en profildefinition
I det här exemplet skapar vi en Script Analyzer-profil och sparar den ScriptAnalyzerProfile.txt
i filen i den aktuella katalogen. Vi kör Invoke-ScriptAnalyzer
bitLocker-modulfilerna . Värdet för parametern Profil är sökvägen till script analyzer-profilen.
# In .\ScriptAnalyzerProfile.txt
@{
Severity = @('Error', 'Warning')
IncludeRules = 'PSAvoid*'
ExcludeRules = '*WriteHost'
}
Invoke-ScriptAnalyzer -Path $pshome\Modules\BitLocker -Profile .\ScriptAnalyzerProfile.txt
Om du inkluderar en parameter i konflikt i Invoke-ScriptAnalyzer
kommandot, till exempel -Severity Error
, använder cmdleten profilvärdet och ignorerar parametern .
EXEMPEL 9 – Analysera ett skript som lagras som en sträng
I det här exemplet används parametern ScriptDefinition för att analysera en funktion på kommandoraden. Funktionssträngen omges av citattecken.
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
När du använder parametern ScriptDefinition är $null
egenskapen FileName för objektet DiagnosticRecord .
Parametrar
-Confirm
Uppmanar dig att bekräfta innan du kör cmdleten.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CustomRulePath
Ange sökvägen till en fil som definierar regler eller en katalog som innehåller filer som definierar regler.
Jokertecken stöds. När CustomRulePath anges används endast de anpassade regler som finns i de angivna sökvägarna för analysen. Om Invoke-ScriptAnalyzer
det inte går att hitta regler i körs standardreglerna utan föregående meddelande.
Om du vill lägga till regler som definierats i underkataloger för sökvägen använder du parametern RecurseCustomRulePath . Om du vill inkludera de inbyggda reglerna lägger du till parametern IncludeDefaultRules .
Type: | String[] |
Aliases: | CustomizedRulePath |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-EnableExit
När analysen är klar avslutar den här parametern PowerShell-sessionerna och returnerar en slutkod som motsvarar antalet felposter. Detta kan vara användbart i pipelinen för kontinuerlig integrering (CI).
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExcludeRule
Utelämnar de angivna reglerna från Script Analyzer-testet. Jokertecken stöds.
Ange en kommaavgränsad lista med regelnamn, en variabel som innehåller regelnamn eller ett kommando som hämtar regelnamn. Du kan också ange en lista över undantagna regler i en Script Analyzer-profilfil. Du kan exkludera standardregler och regler i en anpassad regelsökväg.
När du exkluderar en regel körs inte regeln på någon av filerna i sökvägen. Om du vill exkludera en regel på en viss rad, parameter, funktion, skript eller klass justerar du parametern Path eller utelämnar regeln. Information om hur du utelämnar en regel finns i exemplen.
Om en regel anges i samlingarna ExcludeRule och IncludeRule undantas regeln.
Type: | String[] |
Position: | Named |
Default value: | All rules are included. |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Fix
Åtgärdar vissa varningar som innehåller en korrigering i deras DiagnosticRecord.
När du använde KorrigeraInvoke-ScriptAnalyzer
tillämpar korrigeringarna innan du kör analysen. Kontrollera att du har en säkerhetskopia av dina filer när du använder den här parametern. Den försöker bevara filkodningen, men det finns fortfarande vissa fall där kodningen kan ändras.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeDefaultRules
Anropa standardregler tillsammans med anpassade regler.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeRule
Kör endast de angivna reglerna i Script Analyzer-testet. Som standard kör PSScriptAnalyzer alla regler.
Ange en kommaavgränsad lista med regelnamn, en variabel som innehåller regelnamn eller ett kommando som hämtar regelnamn. Jokertecken stöds. Du kan också ange regelnamn i en Script Analyzer-profilfil.
När du använder parametern CustomizedRulePath kan du använda den här parametern för att inkludera standardregler och regler i sökvägarna för anpassade regler.
Om en regel anges i samlingarna ExcludeRule och IncludeRule undantas regeln.
Parametern Allvarlighetsgrad har företräde framför IncludeRule. Om allvarlighetsgrad till exempel är Error
kan du inte använda IncludeRule för att inkludera en Warning
regel.
Type: | String[] |
Position: | Named |
Default value: | All rules are included. |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-IncludeSuppressed
Inkludera undertryckt diagnostik i utdata.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Anger sökvägen till skripten eller modulen som ska analyseras. Jokertecken stöds.
Ange sökvägen till ett skript (.ps1
) eller en modulfil (.psm1
) eller till en katalog som innehåller skript eller moduler. Om katalogen innehåller andra typer av filer ignoreras de.
Om du vill analysera filer som inte finns i rotkatalogen för den angivna sökvägen använder du ett jokertecken (C:\Modules\MyModule\*
) eller parametern Recurse .
Type: | String |
Aliases: | PSPath |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Recurse
Kör Script Analyzer på filerna i katalogen Path och alla underkataloger rekursivt.
Recurse gäller endast för parametervärdet Path. Om du vill söka i CustomRulePath rekursivt använder du parametern RecurseCustomRulePath .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RecurseCustomRulePath
Lägger till regler som definierats i underkataloger för CustomRulePath-platsen . Som standard Invoke-ScriptAnalyzer
använder endast de anpassade regler som definierats i den angivna filen eller katalogen. Om du vill inkludera de inbyggda reglerna använder du parametern IncludeDefaultRules .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReportSummary
Skriv en sammanfattning av överträdelserna som hittats till värden.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SaveDscDependency
Lösa DSC-resursberoenden.
När Invoke-ScriptAnalyzer
körs med den här parametern söker den efter instanser av Import-DSCResource -ModuleName <somemodule>
. Om <somemodule>
inte kan hittas genom att söka i $env:PSModulePath
returneras Invoke-ScriptAnalyzer
parsningsfelet. Det här felet orsakas av att PowerShell-parsern inte kan hitta symbolen för <somemodule>
.
Om Invoke-ScriptAnalyzer
hittar modulen i PowerShell-galleriet laddas den saknade modulen ned till en temporär sökväg. Den temporära sökvägen läggs sedan till $env:PSModulePath
under genomsökningens varaktighet.
Den temporära platsen finns i $LOCALAPPDATA/PSScriptAnalyzer/TempModuleDir
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptDefinition
Kör analysen på kommandon, funktioner eller uttryck i en sträng. Du kan använda den här funktionen för att analysera instruktioner, uttryck och funktioner oberoende av deras skriptkontext.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Settings
En sökväg till en fil som innehåller en användardefinierad profil eller ett hashtable-objekt som innehåller inställningar för ScriptAnalyzer.
Körs Invoke-ScriptAnalyzer
med de parametrar och värden som anges i filen eller hashtable.
Om sökvägen eller innehållet i filen eller hashtabellen är ogiltigt ignoreras den. Parametrarna och värdena i profilen har företräde framför samma parameter och värden som anges på kommandoraden.
En Script Analyzer-profilfil är en textfil som innehåller en hashtabell med en eller flera av följande nycklar:
- CustomRulePath
- ExcludeRules
- IncludeDefaultRules
- IncludeRules
- RecurseCustomRulePath
- Regler
- Allvarlighetsgrad
Nycklarna och värdena i profilen tolkas som om de vore standardparametrar och värden Invoke-ScriptAnalyzer
för , liknande splatting. Mer information finns i about_Splatting.
Type: | Object |
Aliases: | Profile |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Severity
När du har kört Script Analyzer med alla regler väljer den här parametern regelöverträdelser med angiven allvarlighetsgrad.
Giltiga värden är:
- Fel
- Varning
- Information.
Du kan ange ett eller flera allvarlighetsgradsvärden.
Parametern filtrerar regelöverträdelserna först när alla regler har körts. Om du vill filtrera regler effektivt använder Get-ScriptAnalyzerRule
du för att välja de regler som du vill köra.
Parametern Allvarlighetsgrad har företräde framför IncludeRule. Om allvarlighetsgrad till exempel är Error
kan du inte använda IncludeRule för att inkludera en Warning
regel.
Type: | String[] |
Position: | Named |
Default value: | All rule violations |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SuppressedOnly
Returnerar endast överträdelser för regler som ignoreras.
Returnerar ett SuppressedRecord-objekt (Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord).
Om du vill ignorera en regel använder du SuppressMessageAttribute. Mer information finns i exemplen.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Visar vad som skulle hända om cmdleten kördes. Cmdleten körs inte.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
None
Du kan inte skicka indata till denna cmdlet.
Utdata
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord
Som standard Invoke-ScriptAnalyzer
returnerar ett DiagnosticRecord-objekt för varje regelöverträdelse.
Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord
Om du använder parametern Invoke-ScriptAnalyzer
SuppressedOnly returnerar i stället ett SuppressedRecord-objekt.
Relaterade länkar
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för