2016-08-08 2 views
1

Я пытаюсь создать приложение для перезапуска виртуальных машин в Hyper V на сервере 2012 У меня была каждая VM в перезапуске списка, но я хочу ее адаптировать, чтобы выключить машину и затем снова. Прокомментированный код - это рабочий принудительный resart. Спасибо заранее.Перезапустить машину Hyper V с помощью командлета powershell с 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

В чем вопрос? – DavidG

+0

Это все еще не вопрос. и если у вас есть дополнительная информация, пожалуйста, отредактируйте свой вопрос. Код в комментариях не читается. – DavidG

+0

из Stop vm cmd, ошибки не выбрасываются, последовательность resart cmd в комментированном коде действительно работает. однако я хочу использовать последовательность из остановки vm cmd –

ответ

1

Только в случае, если вы все еще нужен ответ:

using (PowerShell shell = PowerShell.Create()) 

, прежде чем начать

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

останавливает часы ВМ и ждет результата

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

Запуск виртуальной машины и ждет результата

Выполняет все машины и возвращает в этом случае имя вашей машины в имя строки, но может возвращать каждый параметр двигателя. (В этом случае строка будет иметь только имя последней машины, потому что он получает постоянно переписывается, но это не должно быть никаких проблем, чтобы заменить его с содержащей объект.)

shell.Streams.Error 
shell.Streams.Warning 

возвращаются все проблемы с PowerShell.

Надеюсь, что это поможет.

PS: Убедитесь, что у вас есть обновленная файловая система, поскольку многие системы имеют более старые, которые не поддерживают все команды. Возможно, есть и команда перезагрузки, но я не знаю и с тех пор, как я не могу проверить, где я, вам нужно найти это для себя.

Смежные вопросы