using System; using System.Management.Automation.Language; // 用 PowerShell 自己的解析器检查脚本语法。 // 之前的教训:靠字符配对统计漏掉了真实语法错误,装到客户机器上才炸。 class Program { static int Main(string[] args) { if (args.Length == 0) { Console.WriteLine("用法: psparse <文件.ps1> [更多文件...]"); return 2; } int bad = 0; foreach (var path in args) { try { Parser.ParseFile(path, out Token[] tokens, out ParseError[] errors); if (errors.Length == 0) { Console.WriteLine($" ✔ 语法通过 {System.IO.Path.GetFileName(path)} ({tokens.Length} 个词法单元)"); } else { bad++; Console.WriteLine($" ✖ 语法错误 {path}"); foreach (var e in errors) { var txt = e.Extent?.Text ?? ""; txt = txt.Replace("\r", " ").Replace("\n", " ").Trim(); if (txt.Length > 70) txt = txt.Substring(0, 70) + "…"; Console.WriteLine($" 行 {e.Extent.StartLineNumber} 列 {e.Extent.StartColumnNumber}:{e.Message}"); Console.WriteLine($" 片段:{txt}"); } } } catch (Exception ex) { bad++; Console.WriteLine($" ✖ 读取失败 {path}:{ex.Message}"); } } return bad == 0 ? 0 : 1; } }