C# 运行多个powershell命令

C# 运行多个powershell命令,c#,powershell,C#,Powershell,在C#中调用powershell命令时,如何运行诸如set adserversettings之类的前兆命令?现在它返回0个结果 以下是我正在使用的代码: Command command1 = new Command("set-adserversettings"); CommandParameter parameter1 = new CommandParameter("viewentireforest", true); command1.Parameters.Add(parameter1); C

在C#中调用powershell命令时,如何运行诸如
set adserversettings
之类的前兆命令?现在它返回0个结果

以下是我正在使用的代码:

Command command1 = new Command("set-adserversettings");
CommandParameter parameter1 = new CommandParameter("viewentireforest", true);
command1.Parameters.Add(parameter1);

Command command2 = new Command("set-userphoto");
CommandParameter parameter2a = new CommandParameter("identity", tbxName.Text);
CommandParameter parameter2b = new CommandParameter("picturedata", displayedImage);
CommandParameter parameter2c = new CommandParameter("domaincontroller", "xx-xx-xx-01.xx.xx.xx.xxx");
CommandParameter parameter2d = new CommandParameter("confirm", false);
command2.Parameters.Add(parameter2a);
command2.Parameters.Add(parameter2b);
command2.Parameters.Add(parameter2c);
command2.Parameters.Add(parameter2d);

Pipeline pipeline = runspacee.CreatePipeline();

pipeline.Commands.Add(command1);
pipeline.Commands.Add(command2);

var exResults = pipeline.Invoke();

在我测试之后,它将按如下方式工作,您应该在不同的管道上运行这些命令,但要持续运行:

    List<Command> commandList = new List<Command>();

    Command command1 = new Command("set-adserversettings");
    CommandParameter parameter1 = new CommandParameter("viewentireforest", true);
    command1.Parameters.Add(parameter1);
    commandList.Add(command1);

    Command command2 = new Command("set-userphoto");
    CommandParameter parameter2a = new CommandParameter("identity", tbxName.Text);
    CommandParameter parameter2b = new CommandParameter("picturedata", displayedImage);
    CommandParameter parameter2c = new CommandParameter("domaincontroller", "xx-xx-xx-01.xx.xx.xx.xxx");
    CommandParameter parameter2d = new CommandParameter("confirm", false);
    command2.Parameters.Add(parameter2a);
    command2.Parameters.Add(parameter2b);
    command2.Parameters.Add(parameter2c);
    command2.Parameters.Add(parameter2d);
    commandList.Add(command2);

    Pipeline pipeline;
    Collection<PSObject> exResults = null;

    foreach (Command cmd in commandList)
    {   
        pipeline = runspacee.CreatePipeline();
        pipeline.Commands.Add(cmd);

        exResults = pipeline.Invoke();
    }   
List commandList=newlist();
Command command1=新命令(“设置adserversettings”);
CommandParameter1=新的CommandParameter(“viewentireforest”,true);
command1.Parameters.Add(parameter1);
commandList.Add(command1);
Command command2=新命令(“set userphoto”);
CommandParameter2A=新的CommandParameter(“标识”,tbxName.Text);
CommandParameter2b=新的CommandParameter(“picturedata”,DisplayeImage);
CommandParameter parameter2c=新的CommandParameter(“域控制器”,“xx-xx-xx-01.xx.xx.xx.xxx”);
CommandParameter2D=新的CommandParameter(“确认”,false);
command2.Parameters.Add(parameter2a);
command2.Parameters.Add(parameter2b);
command2.Parameters.Add(parameter2c);
command2.Parameters.Add(parameter2d);
commandList.Add(command2);
管道;
集合exResults=null;
foreach(commandList中的命令cmd)
{   
pipeline=runspacee.CreatePipeline();
pipeline.Commands.Add(cmd);
exResults=pipeline.Invoke();
}   

这真是一个伟大的发现-我一直在琢磨为什么调用Powershell.Invoke()会忽略设置adserversettings。通过遍历Powershell.Commands,为每个命令创建一个管道,最终使它工作起来。我不确定为什么几乎没有其他人会遇到这种问题……也许在.NET代码中处理PowerShell命令是个坏主意。如果官方有一个更完整的库来帮助我处理它,我会马上使用它。你能在PoSh中做什么,而你不能用.Net做什么?