Delen via


Invoke-ScriptAnalyzer

Evalueert een script of module op basis van geselecteerde best practice-regels

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 evalueert scripts of modulebestanden (.ps1, .psm1en .psd1 bestanden) op basis van een verzameling best practice-regels en retourneert objecten die schendingen van regels vertegenwoordigen. Het bevat ook speciale regels voor het analyseren van DSC-resources.

Invoke-ScriptAnalyzer wordt geleverd met een set ingebouwde regels. Standaard worden alle regels gebruikt. U kunt de parameters IncludeRule en ExcludeRule gebruiken om de gewenste regels te selecteren. U kunt de Get-ScriptAnalyzerRule cmdlet gebruiken om de regels te onderzoeken en te selecteren die u wilt opnemen of uitsluiten van de evaluatie.

U kunt ook aangepaste regels gebruiken die u in PowerShell-scripts schrijft of compileert in assembly's met behulp van C#. Aangepaste regels kunnen ook worden geselecteerd met de parameters IncludeRule en ExcludeRule .

U kunt ook een regel opnemen in de analyse, maar de uitvoer van die regel onderdrukken voor geselecteerde functies of scripts. Deze functie mag alleen worden gebruikt wanneer dat nodig is. Als u regels wilt ophalen die zijn onderdrukt, voert u uit Invoke-ScriptAnalyzer met de parameter SuppressedOnly .

Voor gebruik in CI-systemen sluit EnableExit de shell af met een afsluitcode die gelijk is aan het aantal foutrecords.

Voorbeelden

VOORBEELD 1- Alle Script Analyzer-regels voor een script uitvoeren

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

VOORBEELD 2- Alle Script Analyzer-regels uitvoeren op alle bestanden in de map Modules

In dit voorbeeld worden alle Script Analyzer-regels Modules uitgevoerd voor alle .ps1 en .psm1 bestanden in uw gebruikersmap en de bijbehorende submappen.

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

VOORBEELD 3- Eén regel uitvoeren op een module

In dit voorbeeld wordt alleen de regel PSAvoidUsingPositionalParameters uitgevoerd op de bestanden in de PSDiagnostics modulemap. U kunt een dergelijke opdracht gebruiken om alle exemplaren van een bepaalde regelovertreding te vinden.

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

VOORBEELD 4- Alle regels uitvoeren, behalve twee op uw modules

In dit voorbeeld worden alle regels uitgevoerd, met uitzondering van PSAvoidUsingCmdletAliases en PSAvoidUsingInternalURLs op de .ps1 bestanden en .psm1 in de map en in de MyModules submappen.

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

VOORBEELD 5- Script Analyzer uitvoeren met aangepaste regels

In dit voorbeeld wordt Script Analyzer uitgevoerd op Test-Script.ps1 met de standaardregels en -regels in het C:\CommunityAnalyzerRules pad.

Invoke-ScriptAnalyzer -Path D:\test_scripts\Test-Script.ps1 -CustomRulePath C:\CommunityAnalyzerRules -IncludeDefaultRules

VOORBEELD 6- Voer alleen de regels uit die de ernst van de fout zijn en de PSDSC-bronnaam hebben

$DSCError = Get-ScriptAnalyzerRule -Severity Error | Where SourceName -eq PSDSC
$Path = "$home\Documents\WindowsPowerShell\Modules\MyDSCModule"
Invoke-ScriptAnalyzerRule -Path $Path -IncludeRule $DSCError -Recurse

VOORBEELD 7- Schendingen van regels onderdrukken

In dit voorbeeld ziet u hoe u de rapportage van regelschendingen in een functie kunt onderdrukken en hoe u regelschendingen kunt detecteren die worden onderdrukt.

In het voorbeeld wordt het SuppressMessageAttribute kenmerk gebruikt om de regels PSUseSingularNouns en PSAvoidUsingCmdletAliases te onderdrukken voor de Get-Widgets functie in het Get-Widgets.ps1 script. U kunt dit kenmerk gebruiken om een regel te onderdrukken voor een module, script, klasse, functie, parameter of regel.

Met de eerste opdracht wordt Script Analyzer uitgevoerd op het scriptbestand met de functie. De uitvoer meldt een regelschending. Hoewel er meer regels worden geschonden, wordt geen van beide onderdrukte regels gerapporteerd.

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

De tweede opdracht gebruikt de parameter SuppressedOnly om schendingen van de regels die worden onderdrukt scriptbestand te melden.

VOORBEELD 8- Scriptbestanden analyseren met behulp van een profieldefinitie

In dit voorbeeld maken we een Script Analyzer-profiel en slaan we dit op in het ScriptAnalyzerProfile.txt bestand in de huidige map. We voeren uit Invoke-ScriptAnalyzer op de BitLocker-modulebestanden . De waarde van de parameter Profile is het pad naar het Script Analyzer-profiel.

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

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

Als u een conflicterende parameter in de Invoke-ScriptAnalyzer opdracht opneemt, zoals -Severity Error, gebruikt de cmdlet de profielwaarde en negeert de parameter.

VOORBEELD 9: Een script analyseren dat is opgeslagen als een tekenreeks

In dit voorbeeld wordt de parameter ScriptDefinition gebruikt om een functie op de opdrachtregel te analyseren. De functietekenreeks staat tussen aanhalingstekens.

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

Wanneer u de parameter ScriptDefinition gebruikt, is $nullde eigenschap FileName van het object DiagnosticRecord .

Parameters

-Confirm

Hiermee wordt u gevraagd om bevestiging voordat u de cmdlet uitvoert.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CustomRulePath

Voer het pad in naar een bestand dat regels definieert of een map met bestanden die regels definiëren. Jokertekens worden ondersteund. Wanneer CustomRulePath is opgegeven, worden alleen de aangepaste regels in de opgegeven paden gebruikt voor de analyse. Als Invoke-ScriptAnalyzer u geen regels kunt vinden in de , worden de standaardregels zonder kennisgeving uitgevoerd.

Als u regels wilt toevoegen die zijn gedefinieerd in submappen van het pad, gebruikt u de parameter RecurseCustomRulePath . Als u de ingebouwde regels wilt opnemen, voegt u de parameter IncludeDefaultRules toe.

Type:String[]
Aliases:CustomizedRulePath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-EnableExit

Na voltooiing van de analyse sluit deze parameter de PowerShell-sessies af en retourneert een afsluitcode die gelijk is aan het aantal foutrecords. Dit kan handig zijn in ci-pijplijnen (continue integratie).

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExcludeRule

Hiermee worden de opgegeven regels weggelaten uit de Script Analyzer-test. Jokertekens worden ondersteund.

Voer een door komma's gescheiden lijst met regelnamen, een variabele met regelnamen of een opdracht in waarmee regelnamen worden ophaalt. U kunt ook een lijst met uitgesloten regels opgeven in een Script Analyzer-profielbestand. U kunt standaardregels en regels uitsluiten in een aangepast regelpad.

Wanneer u een regel uitsluit, wordt de regel niet uitgevoerd op een van de bestanden in het pad. Als u een regel op een bepaalde regel, parameter, functie, script of klasse wilt uitsluiten, past u de path-parameter aan of onderdrukt u de regel. Zie de voorbeelden voor informatie over het onderdrukken van een regel.

Als een regel is opgegeven in de verzamelingen ExcludeRule en IncludeRule , wordt de regel uitgesloten.

Type:String[]
Position:Named
Default value:All rules are included.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Fix

Hiermee worden bepaalde waarschuwingen opgelost die een fix in hun DiagnosticRecord bevatten.

Wanneer u Fix hebt gebruikt, Invoke-ScriptAnalyzer past u de oplossingen toe voordat u de analyse uitvoert. Zorg ervoor dat u een back-up van uw bestanden hebt wanneer u deze parameter gebruikt. Er wordt geprobeerd de bestandscodering te behouden, maar er zijn nog steeds enkele gevallen waarin de codering kan worden gewijzigd.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeDefaultRules

Standaardregels en aangepaste regels aanroepen.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeRule

Hiermee worden alleen de opgegeven regels in de Script Analyzer-test uitgevoerd. Standaard voert PSScriptAnalyzer alle regels uit.

Voer een door komma's gescheiden lijst met regelnamen, een variabele met regelnamen of een opdracht in waarmee regelnamen worden ophaalt. Jokertekens worden ondersteund. U kunt ook regelnamen opgeven in een Script Analyzer-profielbestand.

Wanneer u de parameter CustomizedRulePath gebruikt, kunt u deze parameter gebruiken om standaardregels en -regels op te nemen in de aangepaste regelpaden.

Als een regel is opgegeven in de verzamelingen ExcludeRule en IncludeRule , wordt de regel uitgesloten.

De parameter Ernst heeft voorrang op IncludeRule. Als Ernst bijvoorbeeld is, kunt Erroru IncludeRule niet gebruiken om een Warning regel op te nemen.

Type:String[]
Position:Named
Default value:All rules are included.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-IncludeSuppressed

Neem onderdrukte diagnostische gegevens op in de uitvoer.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Path

Hiermee geeft u het pad naar de scripts of module moet worden geanalyseerd. Jokertekens worden ondersteund.

Voer het pad in naar een script (.ps1) of modulebestand (.psm1) of naar een map die scripts of modules bevat. Als de map andere typen bestanden bevat, worden deze genegeerd.

Als u bestanden wilt analyseren die zich niet in de hoofdmap van het opgegeven pad bevinden, gebruikt u een jokerteken (C:\Modules\MyModule\*) of de parameter Recurse .

Type:String
Aliases:PSPath
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Recurse

Voert Script Analyzer recursief uit op de bestanden in de padmap en alle submappen.

Recurse is alleen van toepassing op de waarde van de path-parameter. Als u de CustomRulePath recursief wilt doorzoeken, gebruikt u de parameter RecurseCustomRulePath .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RecurseCustomRulePath

Hiermee voegt u regels toe die zijn gedefinieerd in submappen van de locatie CustomRulePath . Standaard worden alleen de aangepaste regels gebruikt die Invoke-ScriptAnalyzer zijn gedefinieerd in het opgegeven bestand of de opgegeven map. Als u de ingebouwde regels wilt opnemen, gebruikt u de parameter IncludeDefaultRules .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ReportSummary

Schrijf een samenvatting van de schendingen die voor de host zijn gevonden.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SaveDscDependency

Dsc-resourceafhankelijkheden oplossen.

Wanneer Invoke-ScriptAnalyzer wordt uitgevoerd met deze parameter, zoekt het naar exemplaren van Import-DSCResource -ModuleName <somemodule>. Als <somemodule> niet kan worden gevonden door te zoeken in , Invoke-ScriptAnalyzer wordt de $env:PSModulePathparseerfout geretourneerd. Deze fout wordt veroorzaakt doordat de PowerShell-parser het symbool voor <somemodule>niet kan vinden.

Als Invoke-ScriptAnalyzer de module in de PowerShell Gallery wordt gevonden, wordt de ontbrekende module gedownload naar een tijdelijk pad. Het tijdelijke pad wordt vervolgens toegevoegd aan $env:PSModulePath voor de duur van de scan. De tijdelijke locatie vindt u in $LOCALAPPDATA/PSScriptAnalyzer/TempModuleDir.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptDefinition

De analyse wordt uitgevoerd op opdrachten, functies of expressies in een tekenreeks. U kunt deze functie gebruiken om instructies, expressies en functies te analyseren, onafhankelijk van hun scriptcontext.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Settings

Een pad naar een bestand met een door de gebruiker gedefinieerd profiel of een hashtable-object met instellingen voor ScriptAnalyzer.

Wordt uitgevoerd Invoke-ScriptAnalyzer met de parameters en waarden die zijn opgegeven in het bestand of de hashtabel.

Als het pad of de inhoud van het bestand of de hashtabel ongeldig is, wordt het genegeerd. De parameters en waarden in het profiel hebben voorrang op dezelfde parameter en waarden die zijn opgegeven op de opdrachtregel.

Een Script Analyzer-profielbestand is een tekstbestand met een hashtabel met een of meer van de volgende sleutels:

  • CustomRulePath
  • ExcludeRules
  • IncludeDefaultRules
  • IncludeRules
  • RecurseCustomRulePath
  • Regels
  • Ernst

De sleutels en waarden in het profiel worden geïnterpreteerd als standaardparameters en -waarden van Invoke-ScriptAnalyzer, vergelijkbaar met splatting. Zie about_Splatting voor meer informatie.

Type:Object
Aliases:Profile
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Severity

Nadat Script Analyzer met alle regels is uitgevoerd, selecteert deze parameter regelschendingen met de opgegeven ernst.

Geldige waarden zijn:

  • Fout
  • Waarschuwing
  • Informatie.

U kunt een of meer ernstwaarden opgeven.

Met de parameter worden de schendingen van regels pas gefilterd nadat alle regels zijn uitgevoerd. Als u regels efficiënt wilt filteren, gebruikt Get-ScriptAnalyzerRule u om de regels te selecteren die u wilt uitvoeren.

De parameter Ernst heeft voorrang op IncludeRule. Als Ernst bijvoorbeeld is, kunt Erroru IncludeRule niet gebruiken om een Warning regel op te nemen.

Type:String[]
Position:Named
Default value:All rule violations
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SuppressedOnly

Retourneert alleen schendingen voor regels die worden onderdrukt.

Retourneert het object SuppressedRecord (Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord).

Als u een regel wilt onderdrukken, gebruikt u de SuppressMessageAttribute. Zie de voorbeelden voor hulp.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Hiermee wordt weergegeven wat er zou gebeuren als u de cmdlet uitvoert. De cmdlet wordt niet uitgevoerd.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

None

U kunt geen invoer doorsnijden naar deze cmdlet.

Uitvoerwaarden

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord

Invoke-ScriptAnalyzer Standaard retourneert één DiagnosticRecord-object voor elke regelovertreding.

Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.SuppressedRecord

Als u de parameter SuppressedOnly gebruikt, Invoke-ScriptAnalyzer retourneert in plaats daarvan een SuppressedRecord-objecten .