簡體   English   中英

如何在C#中發現PowerShell腳本參數

[英]How to discover PowerShell Script parameters in c#

我們想要在數據庫中存儲和管理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();
}

您可以使用PS解析器,並通過AST訪問參數信息:

$scriptfile = '<full path to script file>'
$AST = [System.Management.Automation.Language.Parser]::ParseFile( $scriptfile,[ref]$null,[ref]$null)

$AST.ParamBlock.Parameters | ft

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM