PowerShell / PSScriptAnalyzer

Download ScriptAnalyzer from PowerShellGallery
https://www.powershellgallery.com/packages/PSScriptAnalyzer/
MIT License
1.87k stars 379 forks source link

Settings param cannot be set to $_ inside of a foreach-object loop #807

Open thomasrayner opened 7 years ago

thomasrayner commented 7 years ago

When the value of the -Settings parameter is set to $_ inside of a foreach-object loop, PSScriptAnalyzer is unable to find the settings file.

Steps to reproduce: Create a file that violates a rule that is only checked if a particular setting is triggered. IE:

if ($true)
{
    Write-Output 'Something'
}

This code will throw errors if -Settings is set to CodeFormattingStroustrup but not if -Settings it is omitted.

The following command returns warnings. invoke-scriptanalyzer -path C:\files\ax.ps1 -Settings 'CodeFormattingStroustrup' But this one does not. 'CodeFormattingStroustrup' | % { invoke-scriptanalyzer -path C:\files\ax.ps1 -Settings $_ }

Using -Verbose on the non-working example shows that PSScriptAnalyzer cannot find a settings file.

This occurs on version 1.15.0 of PSScriptAnalyzer.

Screenshot image

kapilmb commented 7 years ago

Probably something is wrong with the settings parameter processing. The following, however, seems to work as expected:

'CodeFormattingStroustrup' | % { invoke-scriptanalyzer -path C:\files\ax.ps1 -Settings "$_" }
bergmeister commented 6 years ago

@ThmsRynr This still reproes in 1.16.1 and in the latest version of development branch. There have been recent improvements to the -Setting parameter object parsing to allow it parsing expressions that resolve to a string at the end (in BeginProcessing, the object is not a string yet but a PSObject), therefore the improvement also needs to take those built in settings into account as well. I opened a PR with a fix for it, I just need to add a test and then we are ready to go (and hopefully this makes it into the next upcoming version)