gpt4 book ai didi

c# - 如何在 C# 中发现 PowerShell 脚本参数

转载 作者:行者123 更新时间:2023-12-02 00:24:13 28 4
gpt4 key购买 nike

我们希望在数据库中存储和管理 PowerShell 脚本,并通过 C# 执行它们。我们怎样才能在执行这样的脚本之前发现它的参数呢?因此我们可以将它们设置为已知值或提示用户输入值。

一些说明:

我们创建了管理系统MS。

  1. 管理员将 PowerShell 脚本存储在 MS 数据库中。
  2. 稍后,另一位管理员从 MS 提供的列表中选择此脚本。
  3. MS 发现脚本的参数。
  4. MS 提示管理员输入值。
  5. MS 使用提供的参数执行脚本。

        string testScript = @"
    {
    param(
    [ValidateNotNullOrEmpty()]
    [string]$Name
    )
    get-process $name
    ";

    Dictionary<string,object> DiscoverParameters()
    {
    using (PowerShell psi = PowerShell.Create())
    {
    psi.AddScript(testScript);
    var pars = new Dictionary<string,object>();
    //How do we get at the parameters
    return pars;
    }
    }

    void ExecuteScript(Dictionary<string,object> pars)
    {
    using (PowerShell psi = PowerShell.Create())
    {
    psi.AddScript(testScript);
    pars.ToList().ForEach(p => psi.AddParameter(p.Key, p.Value));
    Collection<PSObject> PSOutput = psi.Invoke();
    //...
    }
    }

最佳答案

mjolinor 是正确的,使用 PowerShell 解析器可能是获取参数的最佳方法。该示例是在 PowerShell 中使用的,下面是在 C# 中使用的示例。我不太确定您正在寻找的参数是 Dictionary<string, object> 。在这里,我们只是将名称粘贴到列表中,尽管您还可以提取其他信息,例如静态类型。

using System.Management.Automation;
using System.Management.Automation.Language;

static void Main(string[] args)
{
const string testScript = @"
param(
[ValidateNotNullOrEmpty()]
[string]$Name
)
get-process $name
";
foreach(var parameter in GetScriptParameters(testScript))
{
Console.WriteLine(parameter);
}
}

private static List<string> GetScriptParameters(string script)
{
Token[] tokens;
ParseError[] errors;
var ast = Parser.ParseInput(script, out tokens, out errors);
if (errors.Length != 0)
{
Console.WriteLine("Errors: {0}", errors.Length);
foreach (var error in errors)
{
Console.WriteLine(error);
}
return null;
}

return ast.ParamBlock.Parameters.Select(p => p.Name.ToString()).ToList();
}

关于c# - 如何在 C# 中发现 PowerShell 脚本参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com