How to add Powershell SnapIn in c#

5.8k Views Asked by At

I have a Powershell Script which is stored in a string called "script" with the content:

get-user |  out-file C:\Users\user\Desktop\user.txt -append

My C# Code:

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();

If I debug the code I get the following exception:

No snap-ins have been registered for Windows Powershell Version 2

If I run the script manually and add the snap-in it works fine

2

There are 2 best solutions below

1
x0n On BEST ANSWER

That error message also means that you are trying to load a 32bit snapin from a 64bit powershell instance (or vice-versa.) In your case, you need to compile your program to target the correct bitness: x86. AnyCPU will default to the bitness of your machine, which is 64 bit.

0
user1019042 On

I had a similar issue... I was trying to execute a custom powershell cmdlet from a console application. I verified that my console is set to 4.0 framework and the powershell was 3.0. It turned out that the issue was "prefer 32 bit" setting in bild tab of the console was set to true. I unchecked it and everything worked!