我的大型PowerShell /控制台应用程序需要OOP等,以便于开发。
我了解诸如NDesk.Options和CommandLineParser之类的解析器,但是我想要一些东西来尽可能模拟cmdlet解析。例如。支持解析:
MyProject.exe do-thing ("computer1", "computer2") -p "parameter"
MyProject.exe do-thing -cn ("computer1", "computer2") -p "parameter" -verbose
是否可以使用System.Management.Automation.Language.Parser或其他工具来模拟PowerShell解析?有什么例子和陷阱值得提防吗?
答案 0 :(得分:1)
当然,您可以使用Parser.ParseInput()
解析args,然后从生成的CommandAst
中提取各个元素:
using System.Management.Automation.Language;
public class Program
{
public static void Main(string[] args)
{
Token[] tokens;
ParseError[] errors;
Ast topAst = Parser.ParseInput(String.Join(" ", args), out tokens, out errors);
// Find the CommandAst object
CommandAst parsedCommand = topAst.Find(ast => ast is CommandAst, true);
// Grab the command name
string commandName = ((StringConstantExpressionAst)parsedCommand.CommandElements[0]).Value;
// Grab the remaining command arguments from CommandAst.CommandElements
}
}
我可能会将参数存储在Dictionary<string,string[]>