2013-11-26 170 views
6

我試圖在C#中運行EMC命令。我使用安裝了交換管理工具的個人電腦運行。從C#運行Exchange Powershell命令#

我們的Exchange服務器已經在2007上運行了它們。

問題是,當我運行Powershell或EMC時,我需要以擁有Exchange Server 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管理單元時,我收到了它。

我覺得這與我在個人檔案中的權限有關,但我不完全確定。如果確實如此,我該如何解決這個問題。


編輯

我說這聽起來像是權限的原因是因爲我能夠打開PowerShell和添加的管理單元。但是,當我運行諸如get-mailboxstatistics myUserId的命令時,它會拋出一個錯誤,說MyServer\MyStorageGroup不存在。但是,當我shift-rightCLick並以不同的用戶身份運行並使用我的Exchange管理員帳戶的憑據時,我可以運行這些命令。

回答

6

如果有錯誤表明它沒有安裝在您的計算機上,您爲什麼懷疑它與權限有關?

由於this post暗示,請檢查您是否安裝了2007版本的工具,因爲Snapin在2010版本中不可用。

嘗試以下步驟:

打開你選擇的PowerShell的編輯和添加PSSnapin那裏。如果有效,Snapin可用,如果不可用,它確實沒有安裝在您的機器上。

如果可用,請嘗試將您的構建配置從x86設置爲64位,反之亦然。

最終,您可以手動安裝有問題的.dll文件。從基思山參考this answer你必須發出以下PowerShell命令

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

原因我說這聽起來像權限是因爲我能夠打開PowerShell並添加管理單元。但是,當我運行諸如'get-mailboxstatistics myUserId'的命令時,它會拋出一個錯誤,指出「MyServer \ MyStorageGroup」不存在。但是,當我shift-rightCLick並以不同的用戶身份運行並使用我的Exchange管理員帳戶的憑據時,我可以運行這些命令。 – Johnrad

4

象這樣的錯誤往往是一個32位/ 64位的問題。例如,snapin可能被註冊爲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");