Dela via


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, .psm1och .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.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-ScriptAnalyzerbitLocker-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 $nullegenskapen 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 Errorkan 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:PSModulePathreturneras 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-ScriptAnalyzerfö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 Errorkan 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-ScriptAnalyzerSuppressedOnly returnerar i stället ett SuppressedRecord-objekt.