PSAvoidAssignmentToAutomaticVariable Errors on validateset
I have been getting errors on validateset because PSScriptAnalyzer is confusing the validateset as assignment.
An example of this happening is
[validateset($True, $False)]
[bool]$UnfurlLinks,
[validateset($True, $False)]
[bool]$UnfurlMedia,
from https://github.com/RamblingCookieMonster/PSSlack/blob/master/PSSlack/Public/New-SlackMessage.ps1
This is a strange one.
Ultimately ValidateSet only accepts a string array of valid values, so I guess it's going to cast $True and $False to string and be left with 'True' and 'False'.
That's why, in the terminal, when I use the parameter completion that ValidateSet facilitates, I get the string options (not $true or $false):
But accepting the suggestions, the function errors:
New-SlackMessage: Cannot process argument transformation on parameter 'UnfurlLinks'. Cannot convert value "System.String" to type "System.Boolean". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.
Which makes me think the function needs some work if it's using ValidateSet to ensure that a declared Boolean value is either true or false 🤔.
That all said, you're correct and it's not assignment. The rule is probably checking all parameters for any variable expressions and alerting if a reserved name is used.
I'll take a look at this.
This is a strange one.
Ultimately
ValidateSetonly accepts a string array of valid values, so I guess it's going to cast$Trueand$Falsetostringand be left with'True'and'False'.That's why, in the terminal, when I use the parameter completion that
ValidateSetfacilitates, I get the string options (not$trueor$false):
But accepting the suggestions, the function errors:
New-SlackMessage: Cannot process argument transformation on parameter 'UnfurlLinks'. Cannot convert value "System.String" to type "System.Boolean". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.Which makes me think the function needs some work if it's using
ValidateSetto ensure that a declaredBooleanvalue is either true or false 🤔.That all said, you're correct and it's not assignment. The rule is probably checking all parameters for any variable expressions and alerting if a reserved name is used.
I'll take a look at this.
it's not that $true and $false are being converted to a string. It's that they are constants from powershell's perspective, so they don't cause a parsing error. For example, if you use $HOME, you wouldn't get past the parsing stage since $HOME is not a constant from PowerShell's perspective. There are a very small set of variables which PowerShell considers constant.
This attribute is really looking for a set of constant strings
Thanks for the explanation @JamesWTruher. Makes sense!
Thanks for raising this and opening PR, will review
