How can I automatically syntax check a powershell script file? How can I automatically syntax check a powershell script file? powershell powershell

How can I automatically syntax check a powershell script file?


I stumbled onto Get-Command -syntax 'script.ps1' and found it concise and useful.


You could run your code through the Parser and observe if it raises any errors:

# Empty collection for errors$Errors = @()# Define input script$inputScript = 'Do-Something -Param 1,2,3,'[void][System.Management.Automation.Language.Parser]::ParseInput($inputScript,[ref]$null,[ref]$Errors)if($Errors.Count -gt 0){    Write-Warning 'Errors found'}

This could easily be turned into a simple function:

function Test-Syntax{    [CmdletBinding(DefaultParameterSetName='File')]    param(        [Parameter(Mandatory=$true, ParameterSetName='File', Position = 0)]        [string]$Path,         [Parameter(Mandatory=$true, ParameterSetName='String', Position = 0)]        [string]$Code    )    $Errors = @()    if($PSCmdlet.ParameterSetName -eq 'String'){        [void][System.Management.Automation.Language.Parser]::ParseInput($Code,[ref]$null,[ref]$Errors)    } else {        [void][System.Management.Automation.Language.Parser]::ParseFile($Path,[ref]$null,[ref]$Errors)    }    return [bool]($Errors.Count -lt 1)}

Then use like:

if(Test-Syntax C:\path\to\script.ps1){    Write-Host 'Script looks good!'}


PS Script Analyzer is a good place to start at static analysis of your code.

PSScriptAnalyzer provides script analysis and checks for potential code defects in the scripts by applying a group of built-in or customized rules on the scripts being analyzed.

It also integrates with Visual Studio Code.

There are a number of strategies for mocking PowerShell as part of unit tests, and also have a look at Pester.

The Scripting Guy's Unit Testing PowerShell Code With Pester
PowerShellMagazine's Get Started With Pester (PowerShell unit testing framework)