Использование PowerShell Parser для консольного приложения - PullRequest
0 голосов
/ 24 ноября 2018

Моему большему приложению PowerShell / console требуется OOP и т. Д. Для упрощения разработки.

Я знаю о таких синтаксических анализаторах, как NDesk.Options и CommandLineParser, но я хочу, чтобы что-то имитировало синтаксический анализ командлета как можно ближе.Например, парсинг поддержки для:

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 голосов
/ 24 ноября 2018

Конечно, вы можете использовать Parser.ParseInput() для разбора аргументов и затем извлечь отдельные элементы из полученного 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[]>

...