2013-10-16 60 views
0

我試圖從未安裝Exchange cmdlet的遠程計算機運行遠程Powershell Cmdlet(Exchange 2010的cmdlet之一),在我的C#代碼中使用Powershell遠程處理(v2)。我有這樣的事情:從C#運行遠程Cmdlet Runspace

var connection = new WSManConnectionInfo("http://my.exchange.srv/PowerShell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credentials); 
var runspace = RunspaceFactory.CreateRunspace(connection); 
var ps = PowerShell.Create(); 
ps.Runspace = runspace; 
runspace.Open(); 
var results = ps.AddCommand("Enable-MailPublicFolder").AddArgument(folderId).Invoke(); 

這會返回一個RemoteException:術語「啓用-MailPublicFolder無法識別」錯誤。這是因爲本地計算機不熟悉Exchange Cmdlet。

但是,我不知道如何將Exchange模塊導入到我的運行空間。我找到了各種解決方案,但都是部分解決方案。有些人告訴我使用RunspaceConfiguration添加Exchange 2010管理單元,但RunspaceFactory.CreateRunspace接受RunspaceConfiguration並沒有超載,並且還允許我通過WSManConnectionInfo連接到遠程主機。 另一個解決方案是撥打AddScript而不是AddCommand,這似乎沒有引發異常,但是在沒有告訴我原因的情況下,似乎也沒有做任何事情。我寧願使用相對較強的類型(使用AddCommand)而不是傳遞隨機字符串。

是否有另一種不涉及在本地計算機上安裝模塊的方法?或者,除此之外,如何在本地安裝Exchange 2010 cmdlet?

+0

你的連接URi是什麼? –

+0

'https:// my.exchange.server/Powershell',並且我將「http://schemas.microsoft.com/powershell/Microsoft.Exchange」作爲ShellUri進行傳遞。 Exchange是否公開了公開Exchange cmdlet的其他端點? –

回答

1

您收到的錯誤通常表示您用於遠程連接的帳戶不是Exchange中必需的RBAC角色組的成員。

當遠程會話初始化時,服務器將檢查進行連接的帳戶具有哪些角色,並在爲該組角色成員定製的會話中創建一組代理功能。如果該帳戶不屬於管理公用文件夾的角色組,您將不具有會話中可用的公用文件夾管理cmdlet的代理功能。

+0

的確,這就是它!遺憾的是,沒有給出或記錄與安全相關的錯誤,因爲我只需將用戶添加到公用文件夾管理組來修復它。謝謝! –