3

Import-Module 命令在 powershell windows 控制台上工作正常,但相同的命令在 c# api 上不起作用。我正在使用这个项目来执行 powershell 脚本: http: //www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

它执行其中许多命令,但不执行“Import-Module 'c:\vm\vm.psd1'”命令。我尝试导入微软模块,但它也不起作用。如何使用 c# api 执行“Import-Module”命令?

add-pssnapin 'virtualmachinemanager' 行不通。

4

2 回答 2

1

尝试这样的事情来加载管理单元并执行你的命令:

using System.Management.Automation.Runspaces;

//...

var rsConfig = RunspaceConfiguration.Create();
using (var myRunSpace = RunspaceFactory.CreateRunspace(rsConfig))
{
    PSSnapInException snapInException = null;
    var info = rsConfig.AddPSSnapIn("FULL.SNAPIN.NAME.HERE", out snapInException);

    myRunSpace.Open();
    using (var pipeLine = myRunSpace.CreatePipeline())
    {
        Command cmd = new Command("YOURCOMMAND");
        cmd.Parameters.Add("PARAM1", param1);
        cmd.Parameters.Add("PARAM2", param2);
        cmd.Parameters.Add("PARAM3", param3);

        pipeLine.Commands.Add(cmd);
        pipeLine.Invoke();
        if (pipeLine.Error != null && pipeLine.Error.Count > 0)
        {
            //check error
        }
    }
}
于 2013-01-22T15:44:47.530 回答
1

尝试以这种方式加载模块:

PowerShell powershell = PowerShell.Create();
powerShell.Commands.AddCommand("Import-Module").AddParameter("Name", "c:\vm\vm.psd1'");

或者

PowerShell powershell = PowerShell.Create();
powershell.Commands.AddCommand("Add-PsSnapIn").AddParameter("Name", "virtualmachinemanager");

使用管道尝试创建一个InitialSessionState

InitialSessionState iss = InitialSessionState.CreateDefault();
           iss.ImportPSModule(new string[] { @"C:\vm\vm.psd1"});
           Runspace runSpace = RunspaceFactory.CreateRunspace(iss);
           runSpace.Open();

然后使用您的代码pipeline从加载的模块运行 cmdlet

于 2013-01-22T08:49:43.410 回答