Tôi đang cố gắng để gọi một hàm trong một file powershell như sau:Vấn đề với cách gọi một chức năng PowerShell từ C#
string script = System.IO.File.ReadAllText(@"C:\Users\Bob\Desktop\CallPS.ps1");
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
using (Pipeline pipeline = runspace.CreatePipeline(script))
{
Command c = new Command("BatAvg",false);
c.Parameters.Add("Name", "John");
c.Parameters.Add("Runs", "6996");
c.Parameters.Add("Outs", "70");
pipeline.Commands.Add(c);
Collection<PSObject> results = pipeline.Invoke();
foreach (PSObject obj in results)
{
// do somethingConsole.WriteLine(obj.ToString());
}
}
}
Chức năng PowerShell là trong CallPS.ps1:
Function BatAvg
{
param ($Name, $Runs, $Outs)
$Avg = [int]($Runs/$Outs*100)/100
Write-Output "$Name's Average = $Avg, $Runs, $Outs "
}
tôi nhận ngoại lệ sau:
Thuật ngữ 'BatAvg' không được công nhận là tên của lệnh ghép ngắn, hàm, tệp tập lệnh hoặc chương trình có thể hoạt động.
Tôi đang làm gì sai, tôi thừa nhận, tôi biết rất ít về PowerShell.
Không, vẫn nhận được ngoại lệ tương tự: runspace.Open(); PowerShell ps = PowerShell.Create(); ps.Runspace = runspace; ps.AddScript (tập lệnh); Lệnh c = Lệnh mới ("BatAvg", sai); ps.AddCommand ("BatAvg", false); ps.AddParameter ("Tên", "John"); ps.AddParameter ("Chạy", "6996"); ps.AddParameter ("Outs", "70"); foreach (PSObject obj in ps.Invoke()) { // do somethingConsole.WriteLine (obj.ToString()); } – user577240