[英]How to call powershell script with configfile,parameters in c#
[英]How to discover PowerShell Script parameters in c#
我們想要在數據庫中存儲和管理PowerShell腳本,然后通過C#執行它們。 我們如何在執行之前發現這種腳本的參數? 因此我們可以將它們設置為已知值或提示用戶輸入值。
一些澄清:
我們創建一個管理系統MS。
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.