- Notifications
You must be signed in to change notification settings - Fork 401
Open
Description
Expected behavior
# # PSScriptAnalyzerSettings.psd1 # @{ # CustomRulePath = "rules.psm1" # } Invoke-ScriptAnalyzer -Path .\test.ps1 -Settings ./PSScriptAnalyzerSettings.psd1
outputs: (correct)
RuleName Severity ScriptName Line Message -------- -------- ---------- ---- ------- PSAvoidInvokeSomething Warning test.ps1 1 The command 'Invoke-Something' should not be used. Please use 'Invoke-SomethingElse' instead
Actual behavior
# # PSScriptAnalyzerSettings.psd1 # @{ # CustomRulePath = "$PSScriptRoot/rules.psm1" # } Invoke-ScriptAnalyzer -Path .\test.ps1 -Settings ./PSScriptAnalyzerSettings.psd1
Outputs:
Invoke-ScriptAnalyzer: Value in the settings hashtable should be a string or an array of strings: line 2 column 22 in file [...]\Powershell\PSScriptAnalyzerSettings.psd1
Reasoning
according to this article,
Module manifests are loaded in RestrictedLanguage mode and may use these additional variables:
$PSScriptRoot
$PSEdition
$EnabledExperimentalFeatures
Any environment variable, like $env:TEMP
relative file paths CustomRulePath for my environment
were resolving relative to the cwd instead of relative to the settings.file in neovim. the
./rules.psm1 and rules.psm1 were not resolving correctly.
~/.../Powershell/PSScriptAnalyzerSettings.psd1
where '~' expands to HOMEDIR does work
Environment data
> $PSVersionTable Name Value ---- ----- PSVersion 7.5.2 PSEdition Core GitCommitId 7.5.2 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 > (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() } 1.24.0
Metadata
Metadata
Assignees
Labels
No labels