Function-Based Custom Rule with "Error" Severity Doesn’t Show Under -Severity Error
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Reproduisez le problème avec Measure-AvoidCustomInvokeExpression.psm1 et Invoke-GetProcess.ps1 en utilisant PSScriptAnalyzer 1.23.0 et les deux filtres de gravité. Commencez par suivre la gravité du diagnostic de la règle personnalisée via le point d’entrée du filtrage de gravité de l’analyseur. Le travail est terminé lorsqu’un diagnostic Error apparaît avec -Severity Error, tandis que le filtrage de gravité existant continue de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
I'm experiencing an issue with function-based custom rules. When a custom rule returns a severity of Error, the results don't appear under the -Severity Error filter. Instead, they show up only when filtering by warnings or when no filter is applied.
I couldn’t find any other reports of a similar issue. The closest I came across was #1237, but it seems unanswered or possibly overlooked.
The use-case here is for demonstration purposes.
Steps to reproduce
Custom Rule (Measure-AvoidCustomInvokeExpression.psm1)
function Measure-AvoidCustomInvokeExpression {
[CmdletBinding()]
[OutputType([Microsoft.Windows.Powershell.ScriptAnalyzer.Generic.DiagnosticRecord[]])]
param (
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[System.Management.Automation.Language.ScriptBlockAst] $ScriptBlockAst
)
process {
$results = @()
try {
[ScriptBlock]$predicate = {
param (
[System.Management.Automation.Language.Ast] $Ast
)
[bool]$returnValue = $false
if ($Ast -is [System.Management.Automation.Language.CommandAst]) {
[System.Management.Automation.Language.CommandAst]$commandAst = $Ast
if ($commandAst.GetCommandName() -eq 'Invoke-Expression') {
$returnValue = $true
}
}
return $returnValue
}
[System.Management.Automation.Language.Ast[]]$asts = $ScriptBlockAst.FindAll($predicate, $true)
if ($asts.Count -ne 0) {
foreach ($ast in $asts) {
$result = New-Object `
-TypeName "Microsoft.Windows.Powershell.ScriptAnalyzer.Generic.DiagnosticRecord" `
-ArgumentList `
"Stop it!",
$ast.Extent,
"AvoidCustomInvokeExpression",
Error,
$null
$results += $result
}
}
return $results
}
catch {
$PSCmdlet.ThrowTerminatingError($PSItem)
}
}
}
Export-ModuleMember -Function Measure-AvoidCustomInvokeExpression
Test Script (Invoke-GetProcess.ps1)
Invoke-Expression "Get-Process"
Expected behavior
Invoke-ScriptAnalyzer -Path ./Invoke-GetProcess.ps1 -CustomRulePath ./Measure-AvoidCustomInvokeExpression.psm1 -Severity Error
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
Custom Name Error Invoke-Get 1 Stop it!
Process.ps
1
Actual behavior
Used with -Severity Error
Invoke-ScriptAnalyzer -Path ./Invoke-GetProcess.ps1 -CustomRulePath ./Measure-AvoidCustomInvokeExpression.psm1 -Severity Error
<nothing>
Used with -Severity Warning
Invoke-ScriptAnalyzer -Path ./Invoke-GetProcess.ps1 -CustomRulePath ./Measure-AvoidCustomInvokeExpression.psm1 -Severity Warning
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
Custom Name Error Invoke-Get 1 Stop it!
Process.ps
1
Environment data
Windows 11
> $PSVersionTable
PSVersion 5.1.22621.4391
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
BuildVersion 10.0.22621.4391
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.23.0
Manjaro 6.6.63-1
> $PSVersionTable
PSVersion 7.4.1
PSEdition Core
GitCommitId 7.4.1-0-g5668713d3c906d63cd68e37d415206a95ac061d0
OS Manjaro Linux
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.23.0
- Langage dominant
- C#
- Étoiles
- 2.2k
- Forks
- 415
- Merge moyen
- 13 h 1 min
- PR mergées (30 j)
- 2
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de PowerShell/PSScriptAnalyzer
-
Up-for-Grabs
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
PowerShell/PSScriptAnalyzer#2213 · 2 commentaires ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 72/100
PowerShell/PSScriptAnalyzer#2217 · 1 commentaire ·
-
PSUseConsistentIndentation double-indents attribute bodies that open a scriptblock (`[Attr({ … })]`) Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
PowerShell/PSScriptAnalyzer#2216 · 2 commentaires ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
PowerShell/PSScriptAnalyzer#2211 ·
-
`PSPlaceOpenBrace` and `PSPlaceCloseBrace` leave trailing whitespace when expanding one-line blocks Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 70/100
PowerShell/PSScriptAnalyzer#2210 ·
Toutes les issues de PowerShell/PSScriptAnalyzer
Issues similaires
-
CS0162 "Unreachable code detected" warning from a MSBuildTemp .tmp file in every game project Ouvertebug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
-
Type: enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
apache/arrow-adbc#4809 ·
-
type/automation type/tech-debt
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
microsoft/vscode-azurefunctions#5197 · 1 commentaire ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
microsoft/microsoft-ui-reactor#1274 ·