2013-11-26 25 views
6

Próbuję uruchomić komendy EMC w języku C#. Używam tego z mojego osobistego komputera, na którym zainstalowane są narzędzia do zarządzania wymianą.Uruchom polecenie Exchange Powershell z C#

Nasze serwery wymiany działają na nich w 2007 roku.

Chodzi o to, że kiedy uruchamiam Powershell lub EMC, muszę działać jako inny użytkownik, który ma uprawnienia serwera Exchange 2007, ponieważ mój indywidualny profil nie ma tych uprawnień.

Powiedział, że jest to mój kod mam działa na moim osobistym PC:

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

Błąd Dostaję jest:

Windows PowerShell snap-in Microsoft.Exchange.Management.Powershell.Admin nie jest zainstalowany na tym komputer.

Otrzymuję go, gdy próbuję dodać snapIn Microsoft.Exchange.Management.Powershell.Admin.

Uważam, że ma to coś wspólnego z moimi uprawnieniami do mojego indywidualnego profilu, ale nie jestem do końca pewien. Jeśli to prawda, w jaki sposób mogę to naprawić.


EDIT

Dlatego mówię, że to brzmi jak uprawnieniami dlatego jestem w stanie otworzyć PowerShell, a następnie dodać przystawkę. Jednak po uruchomieniu polecenia, takiego jak get-mailboxstatistics myUserId, pojawia się komunikat o błędzie z informacją, że nie istnieje MyServer\MyStorageGroup. Jednak, gdy przełączam-rightCLick i uruchamiam jako inny użytkownik i używam poświadczeń mojego konta administratora, jestem w stanie uruchomić te polecenia.

Odpowiedz

6

Jeśli błąd mówi, że nie jest zainstalowany na komputerze, dlaczego podejrzewasz, że ma to coś wspólnego z uprawnieniami?

Zgodnie z sugestią, proszę sprawdzić, czy zainstalowałeś wersję 2007 narzędzi, ponieważ Snapin, o którym mowa, nie jest dostępny w wersji 2010.

Spróbuj wykonać następujące czynności:

Otwórz edytor powershell swojego wyboru i dodać PSSnapin tam. Jeśli to działa, Snapin jest dostępny, jeśli nie, to naprawdę nie jest zainstalowany na twoim komputerze.

Jeśli jest dostępny, spróbuj ustawić konfigurację kompilacji z x86 na 64-bitowy lub odwrotnie.

Ostatecznie możesz ręcznie zainstalować plik .dll. Odnosząc się do this answer od Keith wzgórzu trzeba wydać następujące polecenia PowerShell

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

Powodem, dla którego mówię, że brzmi jak uprawnienia, jest to, że jestem w stanie otworzyć powershell i dodać snapin. Jednak po uruchomieniu polecenia, takiego jak 'get-mailboxstatistics myUserId', generuje komunikat o błędzie z informacją, że' MyServer \ MyStorageGroup' nie istnieje. Jednak, gdy przełączam-rightCLick i uruchamiam jako inny użytkownik i używam poświadczeń mojego konta administratora, jestem w stanie uruchomić te polecenia. – Johnrad

4

Błędy takie jak ten są często problem 32 bit/64 bit. Na przykład snapin może być zarejestrowany jako 32-bitowy, a program C# - 64-bitowy lub odwrotnie.

Czasami można to naprawić, uruchamiając inną wersję InstallUtil, np.

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

Po ustaleniu tego, myślę, że trafisz na inny problem z tym, jak tworzysz polecenie. Nie określasz argumentów podczas tworzenia polecenia.Zamiast tego piszesz coś w stylu:

Command createCMD = new Command("Get-Mailbox"); 
createCMD.Parameters.Add(null, "ID"); 
Powiązane problemy