Linting in PowerShell

Continuing the theme of C++ flavoured tools I miss, lint is another essential that doesn’t appear to exist in the PowerShell world. Until I discovered ScriptAnalyzer which, it seems, can do pretty much the same job for .ps1 files. Here I wrote a simple loop to check all files in the same directory.

# Install-Module PSScriptAnalyzer 

$here = Split-Path -Parent $MyInvocation.MyCommand.Path

Get-ChildItem -Path $here -Filter *.ps1 -Recurse | ForEach-Object {

    Invoke-ScriptAnalyzer -Path $_.FullName -IncludeDefaultRules -OutVariable Failures

	If ($Failures.Count -gt 0) {
		Write-Output "$($_.Name) - $($Failures.Count) rule failures"

As with all lint tools, we sometimes need to suppress errors that don’t matter to our current domain.

We do this by creating a config file with ExcludeRules

    Severity =

    ExcludeRules =

and use it when we invoke.

Invoke-ScriptAnalyzer -Path $_.FullName -IncludeDefaultRules -OutVariable Failures -Setting LintSettings.psd1