Как добавить Powershell SnapIn в C#
У меня есть скрипт Powershell, который хранится в строке с именем "script" с содержанием:
get-user | out-file C:\Users\user\Desktop\user.txt -append
Мой код C#:
RunspaceConfiguration runConfig = RunspaceConfiguration.Create();
PSSnapInException psEx = null;
runConfig.AddPSSnapIn("VMWare.View.Broker", out psEx);
Runspace runspace = RunspaceFactory.CreateRunspace(runConfig);
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(script);
Collection<PSObject> results = new Collection<PSObject>();
results = pipeline.Invoke();
runspace.Close();
Если я отлаживаю код, я получаю следующее исключение:
No snap-ins have been registered for Windows Powershell Version 2
Если я запускаю скрипт вручную и добавляю оснастку, он работает нормально
2 ответа
Это сообщение об ошибке также означает, что вы пытаетесь загрузить 32-битную оснастку из 64-битного экземпляра PowerShell (или наоборот). В вашем случае вам необходимо скомпилировать вашу программу для получения правильной битности: x86. AnyCPU по умолчанию использует битность вашей машины, которая составляет 64 бита.
У меня была похожая проблема... Я пытался выполнить пользовательский командлет powershell из консольного приложения. Я проверил, что моя консоль установлена на 4.0 framework, а powershell был 3.0. Оказалось, что проблема заключалась в том, что "предпочитаю 32-битный" параметр на вкладке bild консоли был установлен в значение true. Я снял галочку и все заработало!