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'」コマンドは実行しません。Microsoft モジュールをインポートしようとしましたが、うまくいきません。c# API で "Import-Module" コマンドを実行するにはどうすればよいですか?

またadd-pssnapin 'virtualmachinemanager' 、うまくいきません。

4

2 に答える 2

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ロードされたモジュールからコマンドレットを実行します

于 2013-01-22T08:49:43.410 に答える
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 に答える