2013-10-10 2 views
1

Я пытаюсь перезапустить виртуальную машину с помощью powershell в C#.Перезагрузка VM с помощью Powershell

Сначала я пытаюсь запустить команду GET-VM. Он дает исключение на линии:

PSSnapInInfo psinfo = runspaceConfig.AddPSSnapIn("System.Management.Automation", out snapEx); 

в приведенном ниже кодексе. Может кто-то сказать мне, где я делаю это неправильно.

Сообщение исключения: Нет оснастки не было зарегистрировано для Windows PowerShell версии 2

Мой код:

Command command = new Command("Get-VM"); 
      command.Parameters.Add("Name", "PIE01010299"); 
      RunspaceConfiguration runspaceConfig = RunspaceConfiguration.Create(); 
      PSSnapInException snapEx = null; 
      PSSnapInInfo psinfo = runspaceConfig.AddPSSnapIn("System.Management.Automation", out snapEx); 
      Runspace runSpace = RunspaceFactory.CreateRunspace(runspaceConfig); 
      runSpace.Open(); 
      Pipeline pipeline = runSpace.CreatePipeline(); 

      pipeline.Commands.Add(command); 
      Collection<PSObject> output = pipeline.Invoke(); 
      runSpace.Close(); 
      foreach (PSObject psObject in output) 
      { 
       Console.WriteLine(psObject.ToString()); 
      } 

ответ

1

System.Management.Automation не оснастка. Это основной двигатель PowerShell. Он загружается по умолчанию, потому что ваш проект C# должен ссылаться на эту сборку. Вы, вероятно, хотите импортировать Hyper-V модуль например .:

pipeline.Commands.AddCommand("Import-Module").AddArgument("Hyper-V"); 
pipeline.Invoke(); 
pipeline.Clear(); 

Или использовать метод InitialSessionState.ImportPSModule и затем связать, что с пространством выполнения.

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