#!/usr/bin/env pwsh $ErrorActionPreference = "Stop" Write-Host "Linting */*.ps1 ... " $my_cwd = Get-Location $my_dirs = Get-ChildItem -Directory $my_status = 0 foreach ($my_dir in $my_dirs) { $my_files = Get-ChildItem -Path $my_dir.FullName -File -Filter *.ps1 foreach ($my_file in $my_files) { $my_ps1 = [System.IO.Path]::GetRelativePath($my_cwd, $my_file.FullName) $my_dir = [System.IO.Path]::GetDirectoryName($my_file.FullName) if (-not (Test-Path -PathType Leaf -Path $my_ps1) -or -not (Test-Path -PathType Container -Path $my_dir)) { Write-Host (" SKIP {0} (non-regular file or parent directory)" -f $my_ps1) continue } Write-Host (" {0}" -f $my_ps1) $my_old_file = (Get-Content -Path $my_ps1 -Raw) Invoke-ScriptAnalyzer -Fix -ExcludeRule PSAvoidUsingWriteHost, PSUseDeclaredVarsMoreThanAssignment -Path $my_ps1 # # fmt MUST happen after lint due to Byte-Order Marker (BOM) issues # See https://github.com/PowerShell/PSScriptAnalyzer/issues/1743 # $my_fixed_file = (Get-Content -Path $my_ps1 -Raw) $my_new_file = Invoke-Formatter -ScriptDefinition $my_fixed_file $my_new_file = $my_new_file.Trim() # note: trailing newline is added back on write $my_new_file | Set-Content -Path $my_ps1 $my_new_file = $my_new_file + "`n" if ($my_old_file -ne $my_new_file) { $my_status = 1 } } } exit $my_status