2016-08-08 7 views
1

Ich versuche, eine App zum Neustart von VMs in Hyper V in Server 2012 zu erstellen Ich hatte jede VM in der Liste neu starten, aber ich möchte es anpassen, um den Computer auszuschalten und dann wieder zurück. Der kommentierte Code ist der erzwungene Neustart. Vielen Dank im Voraus.Neustart Hyper V-Maschine mit Powershell Cmdlet von C#

public async static void RestartAllVMs(List<VM> vmList, int timeDelay) 
    { 
     PowerShell ps = PowerShell.Create(); 
     foreach (VM vm in vmList) 
     { 
      /*//Create PowerShell object 
      PowerShell ps = PowerShell.Create(); 
      ps.AddCommand("Restart-VM"); 
      ps.AddArgument(vm.vmName); 
      ps.AddParameter("Force"); 
      ps.Invoke(); 
      await Task.Delay(timeDelay * 1000);*/ 

      //Create PowerShell object 
      //I want to run from here down instead of just restarting the code doesn't work and no errors are thrown. 
      ps.AddCommand("Stop-VM"); 
      ps.AddArgument(vm.vmName); 
      ps.AddCommand("Start-Sleep"); 
      ps.AddParameter("s", 10); 



      ps.AddCommand("Start-VM"); 
      ps.AddArgument(vm.vmName); 
      ps.AddCommand("Start-Sleep"); 
      ps.AddParameter("m", 500); 
      ps.Invoke(); 
      await Task.Delay(timeDelay * 1000); 

     } 

    } 
+0

Was genau ist die Frage? – DavidG

+0

Das ist immer noch keine Frage. und wenn Sie mehr Informationen haben, bearbeiten Sie bitte Ihre Frage. Code in Kommentaren ist nicht lesbar. – DavidG

+0

von der Stop vm cmd, keine Fehler geworfen werden, funktioniert die resart cmd Sequenz im kommentierten Code. aber ich möchte die sequenz von der stop vm cmd verwenden –

Antwort

1

Für den Fall, müssen Sie noch eine Antwort:

using (PowerShell shell = PowerShell.Create()) 

bevor Sie

shell.AddScript("Invoke-Command -ComputerName "name of your target PC" -ScriptBlock {Stop-VM " + VM.getname() + "}"); 

Stopps der VM und wartet auf Ergebnis

shell.AddScript("Invoke-Command -ComputerName "name of your target PC" -ScriptBlock {Start-VM " + VM.getname() + "}"); 

Startet die VM starten und wartet auf das Ergebnis

Führt durch alle Maschinen und gibt in diesem Fall den Namen Ihrer Maschine in Zeichenfolge zurück, aber es kann jeden Parameter der Engine zurückgeben. (In diesem Fall String haben nur den Namen der letzten Maschine, weil sie ständig neu geschrieben wird, aber es sollte kein Problem, setzen Sie statt dessen enthält Objekt sein.)

shell.Streams.Error 
shell.Streams.Warning 

alle Probleme von Powershell zurückkehrt.

Hoffnung, das hilft.

PS: Stellen Sie sicher, dass Sie eine aktuelle Powershell haben, da viele Systeme ältere haben, die nicht alle Befehle unterstützen. Vielleicht gibt es auch einen Neustartbefehl, aber ich weiß nicht und seit ich Ich kann es nicht testen, wo ich bin, du musst das für dich selbst finden.

Verwandte Themen