Skip to content

Rule request: Prefix parameters with an unambiguous (ASCII) hyphen-minus #1932

Description

@iRon7

Hyphen-minus characters are sometimes unintendedly replaced when passed by word processors as Microsoft Office applications as MSWord and Outlook. It is recommended to prefix parameters with an unambiguous hyphen-minus as Unicode dashes might cause parsing errors in earlier versions of PowerShell.
Besides it unnecessary triggers the UseBOMForUnicodeEncodedFile rule with no clear indication of the location.

PowerShell 7

# .\Test.ps1Write-Hosttest –ForegroundColor Red-BackgroundColor Green
Invoke-ScriptAnalyzer .\Test.ps1
RuleName Severity ScriptName Line Message
-------------------------------------
PSAvoidUsingWriteHost Warning Test.ps1 1 File 'Test.ps1' uses Write-Host. Avoid using
Write-Host because it might not work in all hosts,
does not work when there is no host, and (prior to
PS 5.0) cannot be suppressed, captured, or
redirected. Instead, use Write-Output,Write-Verbose, or Write-Information.
PSUseBOMForUnicodeEncodedFile Warning Test.ps1 Missing BOM encoding for non-ASCII encoded file
'Test.ps1'

Windows PowerShell (5.1)

Windows PowerShell (5.1) still has issue with EM-dashes:

.\test.ps1
At C:\Users\Gebruiker\downloads\Test.ps1:1 char:25+ ... “testâ€� â€ForegroundColor ‘Red’ -BackgroundColor ‘Green’+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~The string is missing the terminator: ".
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Invoke-ScriptAnalyzer .\Test.ps1
RuleName Severity ScriptName Line Message
-------------------------------------
TerminatorExpectedAtEndOfString ParseError Test.ps1 1 The string is missing the terminator: ".PSAvoidUsingWriteHost Warning Test.ps1 1 File 'Test.ps1' uses Write-Host. Avoid using Write-Host because it might not work in all hosts, does not work when there is no host, and (prior to PS 5.0) cannot be suppressed, captured, or redirected. Instead, use Write-Output, Write-Verbose, or Write-Information.PSUseBOMForUnicodeEncodedFile Warning Test.ps1 Missing BOM encoding for non-ASCII encoded file 'Test.ps1'

Proposed technical implementation details (optional)

See (PowerShell based) prototype UseHyphenMinusForParameter at: https://github.com/iRon7/PSRules

What is the latest version of PSScriptAnalyzer at the point of writing

1.21.0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions