2011-03-14 75 views
2

我有幾個非常簡單的powershell命令。無法禁用或啓用在C#中運行Powershell命令的Exchange郵箱

disable-mailbox dadelgad -confirm:$false 
enable-mailbox -identity 'dadelgad' -database 'NET5014DB10' -Alias 'dadelgad' 

第一條命令是禁用交換郵箱,第二條命令啓用郵箱。我以組織管理組中具有完全管理權限的用戶身份登錄到Exchange,但不是域管理員。如果我直接在Powershell中運行這些命令,它們工作正常,但在從C#調用時不起作用。

我創建了一個非常簡單的窗體窗體應用程序,它有幾個按鈕從C#代碼調用這些命令。以具有完全Exchange權限的用戶身份運行應用程序,大多數命令都可以正常工作,例如get-mailbox -identity'dadelgad'。我可以在Exchange中設置標誌,添加別名電子郵件並執行大多數功能,但我無法禁用或啓用帳戶。

我是否需要成爲域管理員才能執行這些功能。它幾乎看起來像是一個權限問題,但用戶擁有Exchange的完整權限,並且可以直接在Powershell中執行這兩個命令。

任何幫助將不勝感激?

+0

您怎麼知道它不起作用? – Gabe 2011-03-14 19:08:41

+0

我有權交換並進入MMC並檢查並且命令不起作用。例如,如果我對啓用的郵箱運行禁用命令,它仍然顯示啓用,反之亦然。 – 2011-03-14 19:45:02

+0

所以你在說它失敗了(即沒有錯誤或異常)。 – Gabe 2011-03-14 20:14:54

回答

1

我終於弄清楚是什麼導致了這個問題,所以我將這些信息傳遞給你,以防遇到同樣的問題。我在this url上找到了serverfault.com上的解決方案。發生了什麼事是我登錄的用戶,運行程序被UAC(用戶訪問控制)阻止。關掉解決了這個問題。那麼,沒有真正解決,因爲我不應該像這樣開放,而是告訴我問題是什麼。現在我需要回頭看看是否可以調整權限以允許程序運行,但也提供保護。

1

我使用下面的代碼來創建一個郵箱,我已經修改它來啓用郵箱,它也應該用於禁用。確保找到一個更好的方法來保護帳戶的密碼,而不僅僅是硬編碼。

SecureString password = new SecureString(); 
string username = "youruseraccount"; 
string str_password = "thepassword"; 
string exchangeserver = "yourexchangeserver"; 
string liveIdconnectionUri = "http://" + exchangeserver +"/Powershell?serializationLevel=Full"; 
foreach (char x in str_password) { 
    password.AppendChar(x); 
} 

PSCredential credential = new PSCredential(username, password); 
WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange",credential); 
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default; 

Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 
PowerShell powershell = PowerShell.Create(); 
runspace.Open(); 
powershell.Runspace = runspace; 

PSCommand command1 = new PSCommand(); 
command1.AddCommand("Enable-Mailbox"); 
command1.AddParameter("Identity", "dadelgad"); 
command1.AddParameter("Database", "NET5014DB10"); 
//Add as many parameters as you need 

powershell.Commands = command1; 
powershell.Invoke(); 

運行額外的命令創建一個新的PSCommand,添加它PowerShell的實例方式相同,但後,以前的調用,並再次調用的PowerShell。

Greg

相關問題