Как добавить 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. Я снял галочку и все заработало!

Другие вопросы по тегам