views:

28

answers:

1

I am struggling getting Exchange mManagement Shell commands to run in my C# code. Here' the problem.

I have access to a test Exchange Server running Exchange 2010.

I have run my Exchange Mgmt Shell commands directly on the server inside the Exchange Mgmt Shell Simple Example: get-mailbox

I created a console app to run my PS commands

I placed the exe file on the Exchange Server and tried to run it

I get an error on the PSSnapInInfo info = rsConfig.AddPSSnapIn line of code:

                //Creating and Opening a Runspace
            RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
            PSSnapInException snapInException = null;
            PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
            Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
            myRunSpace.Open();

There is another post with this exact same issue but no real answer so I am starting this one.

The problem is simple. I can't add the snapin called "Microsoft.Exchange.Management.PowerShell.Admin". All the documentation I read on the net says this is the command that will work. In fact I found this post, http://msdn.microsoft.com/en-us/library/bb332449(EXCHG.80).aspx that is very straight forward and seems very simple. Did "Microsoft.Exchange.Management.PowerShell.Admin" go away in Exchange 2010? Is there another snapin I should be referencing? This should ber really simple but I can't get past this error.

BTW, the error I get is: "No snap-ins have been registered for Windows PowerShell version 2."

Any help would be appreciated.

+1  A: 

Assuming the server is 64-bit, it might be related to how the snap-in was registered. For example, if you're running the x86 version of PowerShell it runs in WOW. Therefore, when you run InstallUtil to register the snap-in it gets registered specifically for x86, which in turn is not available to x64. Assuming this, if your C# application was compiled specifically for the x86 platform I would bet that it would work. This is one solution, but not always acceptable.

Ensure that you're running the correct version of PowerShell (x86/x64) and rerun the snap-in registration with the correct version of InstallUtil. For x64, you'll need to run the InstallUtil that lives under the .NET Framework64 directory.

One way to check you're in the correct version of PowerShell is to examine the environment variable, env:PROCESSOR_ARCHITECTURE in your shell.

x64:

> get-item env:PROCESSOR_ARCHITECTURE
Name                           Value
----                           -----
PROCESSOR_ARCHITECTURE         AMD64

x86:

> get-item env:PROCESSOR_ARCHITECTURE
Name                           Value
----                           -----
PROCESSOR_ARCHITECTURE         x86
Scott Saad
this is great info, do you have the syntax for the InstallUtil that needs to be run? I believe my problem is exactly as you stated. I am writing my program on an x86 platform and I don't even have access to a 64 bit machine here at work. Does Exchange need to be installed on the machine to runn the InstallUtil? Sorry for the noob questions, I am new to PowerShell and workng with Exchange.
RJ
I'm unfamiliar with Exchange so I cannot speak directly to it. In general though its best to match up the platforms. If you know Exchange is on x64 and therefore the PowerShell management snap-in is x64 then you'll probably want to target your application for x64. (you can write application on an x86 machine and compile it for x64).Once you end up figuring out which PowerShell (x86 or x64) the snap-in is installed under then you can target your application specifically for that platform.Assuming the above, running InstallUtil no longer becomes necessary as the snap-in is already installed.
Scott Saad