PowerShell / PowerShell/PSScriptAnalyzer
`PSPossibleIncorrectUsageOfAssignmentOperator` fires when assigning value inside `if($())`
Open
Nobody has claimed this yet.
Resolution - By Design
- Dominant language
- C#
- Stars
- 2.2k
- Forks
- 414
- Avg merge
- 13h 1m
- Merged PRs (30d)
- 2
Description
Before submitting a bug report:
- Make sure you are able to repro it on the latest released version
- Perform a quick search for existing issues to check if this bug has already been reported
Steps to reproduce
Invoke-ScriptAnalyzer -ScriptDefinition (
[scriptblock]::Create{
if (
[bool]$(Try{$null=[datetime]('2024-11-12T09:44:00Z');$?}Catch{$false})
) {
Write-Output -InputObject 'Could be parsed as datetime'
}
else {
Write-Output -InputObject 'Could not be parsed as datetime'
}
}.ToString()
) -IncludeRule 'PSPossibleIncorrectUsageOfAssignmentOperator' | Format-List
Expected behavior
Actual behavior
RuleName : PSPossibleIncorrectUsageOfAssignmentOperator
Severity : Warning
Line : 3
Column : 30
Message : Did you mean to use the assignment operator '='? The equality operator in PowerShell is 'eq'.
If an unexpected error was thrown then please report the full error details using e.g. $error[0] | Select-Object *
Environment data
PS > $PSVersionTable
Name Value
---- -----
PSVersion 7.4.6
PSEdition Core
GitCommitId 7.4.6
OS Microsoft Windows 10.0.26100
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
PS > (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.23.0
PS >
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided Invoke-ScriptAnalyzer reproduction and the PSPossibleIncorrectUsageOfAssignmentOperator rule. Trace how the nested if($()) expression is analyzed, then check existing rule coverage for a regression case. Done means the reproduction no longer reports this false positive and existing analyzer checks still pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, powershell
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100