2011-03-14 88 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

相关问题