PSScriptAnalyzer icon indicating copy to clipboard operation
PSScriptAnalyzer copied to clipboard

`PSReviewUnusedParameter` false positive for ValueFromPipeline and current process item `$_`

Open iRon7 opened this issue 3 years ago • 1 comments

The ValueFromPipeline doesn't require the literal name but just the current item ($_) in the Process block:

[CmdletBinding()]
param (
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]$InputObject
)
process {
    $_
}

Expected behavior

No error

Actual behavior

RuleName                            Severity     ScriptName Line  Message
--------                            --------     ---------- ----  -------
PSReviewUnusedParameter             Warning      PSReviewUn 3     The parameter 'InputObject' has been declared but not used.
                                                 usedParame
                                                 ter.ps1

If an unexpected error was thrown then please report the full error details using e.g. $error[0] | Select-Object *

Environment data

> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      7.2.1
PSEdition                      Core
GitCommitId                    7.2.1
OS                             Microsoft Windows 10.0.18363
Platform                       Win32NT
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.20.0

iRon7 avatar Sep 14 '22 15:09 iRon7

As a best practice, I'd still say it would be clearer to use the parameter name for less technical people reading the code. But feel free to open a PR to tweak this rule to exclude this special scenario.

bergmeister avatar Sep 14 '22 18:09 bergmeister