66 ' PSUseDeclaredVarsMoreThanAssignments' , ' ' ,
77 Justification = ' Pester blocks line of sight during analysis.'
88)]
9+ [Diagnostics.CodeAnalysis.SuppressMessageAttribute (
10+ ' PSAvoidUsingWriteHost' , ' ' ,
11+ Justification = ' Write-Host is used for log output.'
12+ )]
913[CmdLetBinding ()]
1014Param (
1115 [Parameter (Mandatory )]
@@ -16,44 +20,46 @@ Param(
1620)
1721
1822BeforeDiscovery {
19- $settings = Import-PowerShellDataFile - Path $SettingsFilePath
20- $rules = [Collections.Generic.List [System.Collections.Specialized.OrderedDictionary ]]::new()
21- $ruleObjects = Get-ScriptAnalyzerRule - Verbose:$false | Sort-Object - Property Severity, CommonName
22- $Severeties = $ruleObjects | Select-Object - ExpandProperty Severity - Unique
23- foreach ($ruleObject in $ruleObjects ) {
24- $skip = if ($ruleObject.RuleName -in $settings.ExcludeRules ) {
25- Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
26- Write-Host " Skipping rule - Exclude list" - ForegroundColor DarkGray
27- $true
28- } elseif ($settings.IncludeRules -and $ruleObject.RuleName -notin $settings.IncludeRules ) {
29- Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
30- Write-Host ' Skipping rule - Include list' - ForegroundColor DarkGray
31- $true
32- } elseif ($settings.Severity -and $ruleObject.Severity -notin $settings.Severity ) {
33- Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
34- Write-Host ' Skipping rule - Severity list' - ForegroundColor DarkGray
35- $true
36- } elseif ($settings.Rules -and $settings.Rules.ContainsKey ($ruleObject.RuleName ) -and -not $settings.Rules [$ruleObject.RuleName ].Enable) {
37- Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
38- Write-Host ' Skipping rule - Disabled' - ForegroundColor DarkGray
39- $true
40- } else {
41- Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor Green
42- $false
43- }
44-
45- $rules.Add (
46- [ordered ]@ {
47- RuleName = $ruleObject.RuleName
48- CommonName = $ruleObject.CommonName
49- Severity = $ruleObject.Severity
50- Description = $ruleObject.Description
51- Skip = $skip
23+ LogGroup " PSScriptAnalyzer tests using settings file [$SettingsFilePath ]" {
24+ $settings = Import-PowerShellDataFile - Path $SettingsFilePath
25+ $rules = [Collections.Generic.List [System.Collections.Specialized.OrderedDictionary ]]::new()
26+ $ruleObjects = Get-ScriptAnalyzerRule - Verbose:$false | Sort-Object - Property Severity, CommonName
27+ $Severeties = $ruleObjects | Select-Object - ExpandProperty Severity - Unique
28+ foreach ($ruleObject in $ruleObjects ) {
29+ $skip = if ($ruleObject.RuleName -in $settings.ExcludeRules ) {
30+ Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
31+ Write-Host ' Skipping rule - Exclude list' - ForegroundColor DarkGray
32+ $true
33+ } elseif ($settings.IncludeRules -and $ruleObject.RuleName -notin $settings.IncludeRules ) {
34+ Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
35+ Write-Host ' Skipping rule - Include list' - ForegroundColor DarkGray
36+ $true
37+ } elseif ($settings.Severity -and $ruleObject.Severity -notin $settings.Severity ) {
38+ Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
39+ Write-Host ' Skipping rule - Severity list' - ForegroundColor DarkGray
40+ $true
41+ } elseif ($settings.Rules -and $settings.Rules.ContainsKey ($ruleObject.RuleName ) -and -not $settings.Rules [$ruleObject.RuleName ].Enable) {
42+ Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor DarkGray
43+ Write-Host ' Skipping rule - Disabled' - ForegroundColor DarkGray
44+ $true
45+ } else {
46+ Write-Host " - $ ( $ruleObject.RuleName ) " - ForegroundColor Green
47+ $false
5248 }
53- )
49+
50+ $rules.Add (
51+ [ordered ]@ {
52+ RuleName = $ruleObject.RuleName
53+ CommonName = $ruleObject.CommonName
54+ Severity = $ruleObject.Severity
55+ Description = $ruleObject.Description
56+ Skip = $skip
57+ }
58+ )
59+ }
60+ Write-Warning " Discovered [$ ( $rules.Count ) ] rules"
61+ $relativeSettingsFilePath = $SettingsFilePath.Replace ($PSScriptRoot , ' ' ).Trim(' \' ).Trim(' /' )
5462 }
55- Write-Warning " Discovered [$ ( $rules.Count ) ] rules"
56- $relativeSettingsFilePath = $SettingsFilePath.Replace ($PSScriptRoot , ' ' ).Trim(' \' ).Trim(' /' )
5763}
5864
5965Describe " PSScriptAnalyzer tests using settings file [$relativeSettingsFilePath ]" {
0 commit comments