2016-07-14 20 views
2

Wie kann ich Vorläufer-Befehle wie set-adserversettings ausführen, wenn ich einen Powershell-Befehl in C# aufruft? Im Moment gibt es 0 Ergebnisse zurück. HierMehrere Powershell-Befehle ausführen

ist der Code, ich verwende:

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(); 
+0

Was Sie in der Lage sind in PoSh zu tun, dass Sie mit .Net nicht tun können? –

Antwort

1

Nachdem ich getestet, würde es wie folgt arbeiten, sollten Sie diese Befehle auf verschiedenen Pipeline laufen, aber immer wieder:

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(); 
    } 
+0

Wirklich großartiges Ergebnis - Ich zog mir die Haare und versuchte herauszufinden, warum Powershell.Invoke() set-adserverversettings ignoriert hat. Iterating durch Powershell.Commands, das Erstellen einer Pipeline für jeden Befehl hat es schließlich funktioniert. Ich bin nicht sicher, warum fast niemand sonst dieses Problem zu haben scheint ... – Compufreak

+0

Vielleicht ist das eine schlechte Idee, den PowerShell-Befehl in .NET-Code zu behandeln. Wenn es eine offiziellere Bibliothek gibt, die mir hilft, damit umzugehen, werde ich sie sofort benutzen. –

Verwandte Themen