Запустить команду Exchange Powershell из C #

Я пытаюсь запускать команды EMC на C #. Я запускаю это со своего персонального компьютера, на котором установлены инструменты управления обменом.

На наших обменных серверах работает 2007 год.

Дело в том, что когда я запускаю Powershell или EMC, мне нужно работать от имени другого пользователя, у которого есть разрешения сервера Exchange 2007, поскольку у моего индивидуального профиля этих разрешений нет.

При этом это мой код, который я запускаю на своем персональном ПК:

RunspaceConfiguration config = RunspaceConfiguration.Create();
PSSnapInException snapEx = null;

PSSnapInInfo info = config.AddPSSnapIn("Microsoft.Exchange.Management.Powershell.Admin", out snapEx);

Runspace runspace = RunspaceFactory.CreateRunspace(config);
runspace.Open();

Command createCMD = new Command("Get-Mailbox ID");

Pipeline pipe = runspace.CreatePipeline();
pipe.Commands.Add(createCMD);

Collection<PSObject> results = pipe.Invoke();

Я получаю следующую ошибку:

Оснастка Windows PowerShell Microsoft.Exchange.Management.Powershell.Admin не установлена ​​на этом компьютере.

Я получаю это, когда пытаюсь добавить Microsoft.Exchange.Management.Powershell.Admin snapIn.

Я чувствую, что это как-то связано с моими разрешениями в моем личном профиле, но я не совсем уверен. Если это правда, как мне это исправить.


ИЗМЕНИТЬ

Причина, по которой я говорю, что это похоже на разрешения, заключается в том, что я могу открыть PowerShell и добавить оснастку. Однако, когда я запускаю такую ​​команду, как get-mailboxstatistics myUserId, она выдает ошибку о том, что MyServer\MyStorageGroup не существует. Однако, когда я нажимаю shift-rightCLick и запускаю от имени другого пользователя и использую учетные данные моей учетной записи администратора обмена, я могу запускать эти команды.


person Johnrad    schedule 26.11.2013    source источник


Ответы (2)


Если в сообщении об ошибке говорится, что он не установлен на вашем компьютере, почему вы подозреваете, что это как-то связано с разрешениями?

Как указано в в этом сообщении, проверьте, установили ли вы Версия инструментов 2007 года, поскольку рассматриваемый Snapin недоступен в версии 2010 года.

Попробуйте выполнить следующие действия:

Откройте любой редактор PowerShell и добавьте туда PSSnapin. Если он работает, Snapin доступен, если нет, он действительно не установлен на вашем компьютере.

Если он доступен, попробуйте установить конфигурацию сборки с x86 на 64bit или наоборот.

В конце концов, вы можете установить эту DLL вручную. Ссылаясь на этот ответ от Кейта Хилла, вы должны выполнить следующие команды Powershell

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll'
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /i $snapinPath
person Marco    schedule 26.11.2013
comment
Я говорю, что это похоже на разрешения, потому что я могу открыть PowerShell и добавить оснастку. Однако, когда я запускаю такую ​​команду, как get-mailboxstatistics myUserId, она выдает ошибку, говоря, что MyServer\MyStorageGroup не существует. Однако, когда я нажимаю shift-rightCLick и запускаю от имени другого пользователя и использую учетные данные моей учетной записи администратора обмена, я могу запускать эти команды. - person Johnrad; 27.11.2013

Подобные ошибки часто связаны с 32- или 64-битными проблемами. Например, оснастка может быть зарегистрирована как 32-разрядная, а ваша программа C # - 64-разрядная или наоборот.

Иногда это можно исправить, запустив другую версию InstallUtil, например

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll'
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe /i $snapinPath

После исправления, я думаю, у вас возникнет еще одна проблема с тем, как вы создаете команду. Вы не указываете аргументы при создании команды. Вместо этого вы пишете что-то вроде:

Command createCMD = new Command("Get-Mailbox");
createCMD.Parameters.Add(null, "ID");
person Jason Shirk    schedule 02.12.2013