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
, .psm1
en .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 $null
de 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 Error
u 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:PSModulePath
parseerfout 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 Error
u 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 .
Verwante koppelingen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor