PowerShell / PowerShell/PSScriptAnalyzer

Rule `PSAvoidShouldContinueWithoutForce` doesn't enforce correct use of the `Force` parameter

Ouverte
#1,308 5 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Up-for-Grabs
Langage dominant
C#
Étoiles
2.2k
Forks
414
Merge moyen
13 h 1 min
PR mergées (30 j)
2

Description

Currently PSScriptAnalyzer shows a PSAvoidShouldContinueWithoutForce violation for any scripts using $PSCmdlet.ShouldContinue that do not include a $Force parameter.
However, once the parameter the violation is resolved; even if that parameter is never used elsewhere in the code.

Steps to reproduce

function Invoke-MVP {
    [CmdletBinding(SupportsShouldProcess = $true)] 
    [OutputType('System.String')]
    Param (
        [Parameter()]
        [switch]$Force # Including this parameter resolves the PSAvoidShouldContinueWithoutForce violation; even though we don't reference Force in the rest of the code
    )
    if ($PSCmdlet.ShouldContinue('Should I continue','Should I continue')) {
        'I continued'
    }
}

# ...
Invoke-ScriptAnalyzer -Path '.\Invoke-MVP.ps1'

Expected behavior

A violation of rule PSAvoidShouldContinueWithoutForce should occur.

Actual behavior

The code is deemed free of violations.

Environment data

> $PSVersionTable

Name                           Value                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                             
PSVersion                      5.1.14409.1018                                                                                                                                                                                                    
PSEdition                      Desktop                                                                                                                                                                                                           
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                                           
BuildVersion                   10.0.14409.1018                                                                                                                                                                                                   
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.18.1

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par localiser l’implémentation de la règle PSAvoidShouldContinueWithoutForce et ses tests existants, puis reproduisez le problème avec l’exemple Invoke-MVP du rapport. C’est terminé lorsqu’un paramètre Force inutilisé ne supprime plus la violation et qu’un test de régression couvre ce cas.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
csharp, powershell
Domaine
tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.