使用PowerShell Parser进行控制台应用程序

时间:2018-11-24 05:54:06

标签: powershell parsing automation console console-application

我的大型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解析?有什么例子和陷阱值得提防吗?

1 个答案:

答案 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[]>