执行包含命令行开关的 Powershell 脚本
Executing Powershell script containing Commandlets
我需要从 C# 执行包含我的自定义 Commandlet(存在于不同程序集中)的 Powershell 脚本。我尝试了以下方法,但它只调用了一次命令行开关,仅此而已,而在脚本中,命令行开关不止一次被写入。
Get-MyParameter myTasks
Start-Process notepad.exe
Get-MyParameter myTasks
Get-MyParameter myTasks
Get-MyParameter myTasks
而MyParameter是用不同的程序集编写的。
尝试过的代码是:
var powerShellInstance = PowerShell.Create();
powerShellInstance.Runspace = runSpace;
var command = new Command("Import-Module");
command.Parameters.Add("Assembly", Assembly.LoadFrom(@"..\CommandLets\bin\Debug\Commandlets.dll"));
powerShellInstance.Commands.AddCommand(command);
powerShellInstance.Invoke();
powerShellInstance.Commands.Clear();
powerShellInstance.Commands.AddCommand(new Command("Get-MyParameter"));
powerShellInstance.AddScript(psScript);
var result = powerShellInstance.Invoke();
我做错了什么?
您正在将脚本添加到与添加 Get-MyParameter
命令相同的管道中。实际上,你在做
get-myparameter | { … your script … }
尝试使用单独的管道。
var result1 = powerShellInstance.AddCommand("Get-MyParameter").Invoke()
var result2 = powerShellInstance.AddScript(psScript).Invoke();
此外,您可以将模块加载代码简化为
powerShellInstance.AddCommand("Import-Module").
AddParameter("Name", @"..\CommandLets\bin\Debug\Commandlets.dll")).
Invoke();
我需要从 C# 执行包含我的自定义 Commandlet(存在于不同程序集中)的 Powershell 脚本。我尝试了以下方法,但它只调用了一次命令行开关,仅此而已,而在脚本中,命令行开关不止一次被写入。
Get-MyParameter myTasks
Start-Process notepad.exe
Get-MyParameter myTasks
Get-MyParameter myTasks
Get-MyParameter myTasks
而MyParameter是用不同的程序集编写的。 尝试过的代码是:
var powerShellInstance = PowerShell.Create();
powerShellInstance.Runspace = runSpace;
var command = new Command("Import-Module");
command.Parameters.Add("Assembly", Assembly.LoadFrom(@"..\CommandLets\bin\Debug\Commandlets.dll"));
powerShellInstance.Commands.AddCommand(command);
powerShellInstance.Invoke();
powerShellInstance.Commands.Clear();
powerShellInstance.Commands.AddCommand(new Command("Get-MyParameter"));
powerShellInstance.AddScript(psScript);
var result = powerShellInstance.Invoke();
我做错了什么?
您正在将脚本添加到与添加 Get-MyParameter
命令相同的管道中。实际上,你在做
get-myparameter | { … your script … }
尝试使用单独的管道。
var result1 = powerShellInstance.AddCommand("Get-MyParameter").Invoke()
var result2 = powerShellInstance.AddScript(psScript).Invoke();
此外,您可以将模块加载代码简化为
powerShellInstance.AddCommand("Import-Module").
AddParameter("Name", @"..\CommandLets\bin\Debug\Commandlets.dll")).
Invoke();