# 用真实解析器定位 .ps1 语法错误, 并打印出错行上下文 param([string]$File = (Join-Path $PSScriptRoot 'gen-step.ps1')) $tokens = $null $errors = $null [System.Management.Automation.Language.Parser]::ParseFile($File, [ref]$tokens, [ref]$errors) | Out-Null $lines = [System.IO.File]::ReadAllLines($File) Write-Output ("总行数: " + $lines.Count) if ($errors.Count -eq 0) { Write-Output "语法 OK" } else { foreach ($e in $errors) { $ln = $e.Extent.StartLineNumber Write-Output ("--- 错误 行{0} 列{1}: {2}" -f $ln, $e.Extent.StartColumnNumber, $e.Message) for ($i = $ln - 3; $i -le ($ln + 1); $i++) { if ($i -ge 1 -and $i -le $lines.Count) { Write-Output ("{0,4} | {1}" -f $i, $lines[$i - 1]) } } } }