我的要求是在我的应用程序中创建用户时,我需要在Exchange Server 2010中为该用户创建一个邮箱。我有代码将用户成功添加到Active Directory。现在,为了将用户添加到Exchange并创建邮箱,我使用的是Windows应用程序。我的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Security;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace AddusertoExchangeForm
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
string runasUsername = "mydomain\\user";
string runasPassword = "password";
SecureString ssRunasPassword = new SecureString();
foreach (char x in runasPassword)
{
ssRunasPassword.AppendChar(x);
}
PSCredential credentials = new PSCredential(runasUsername, ssRunasPassword);
var connInfo = new WSManConnectionInfo(new Uri("http://myserverip/powershell?serializationLevel=Full"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credentials);
connInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
connInfo.SkipCACheck = true;
connInfo.SkipCNCheck = true;
//connInfo.SkipRevocationCheck = true;
// Create the runspace where the command will be executed
var runspace = RunspaceFactory.CreateRunspace(connInfo);
Command cmdGetUser = new Command("Get-User");
cmdGetUser.Parameters.Add("Identity", "test" + " " + "user");
// Add the command to the runspace's pipeline
runspace.Open();
var pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(cmdGetUser);
try
{
// Execute the command
var GetUserResults = pipeline.Invoke();
if (GetUserResults != null && GetUserResults.Count > 0)
{
MessageBox.Show(GetUserResults.Count.ToString());
}
else
{
MessageBox.Show(GetUserResults.Count.ToString());
}
}
catch (Exception x)
{
MessageBox.Show(x.Message);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
这里我粘贴的代码是Get-User命令,它连接到Exchange服务器并获取用户的详细信息。然后,如果用户和他的邮箱不存在,我需要将其添加到Exchange服务器并创建邮箱。但是我收到的错误如下所述:
System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server myserverip failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
at System.Management.Automation.RemoteRunspace.Open()
我搜索了很多内容并尝试了许多选项,例如检查用户权限,检查Exchange服务器所在的IIS设置和Powershell。我已经尝试了Set-User UserName -RemotePowerShellEnabled $ True并尝试了Set-ExecutionPolicy RemoteSigned和许多其他的东西,但到目前为止还没有任何工作。
需要注意的一点是,我的Windows应用程序托管在不同的服务器上,Exchange和Powershell位于不同的服务器上,但两者都在同一个域中。
如果有人遇到此问题并找到解决方案,请提供帮助。
答案 0 :(得分:0)
如果我错了,有人可以纠正我。但我相信您可以将用户添加到Exchange的唯一方法是使用Exchange命令行管理程序。
答案 1 :(得分:0)
EMS是最好的做事方式。所有控制台都在后台生成并运行PowerShell脚本。您可以在命令行管理程序中配置控制台中无法使用的选项。
确保您是组织管理小组的一部分。默认情况下我不认为是域管理员组。
答案 2 :(得分:0)
如果您使用activedirectory并交换pssnapin,一切都可以通过Microsoft提供的工具完成。这里有一些关于远程管理的好信息:http://social.technet.microsoft.com/Forums/exchange/en-US/b0211fa6-cb3a-4ffe-9e79-c51642fcd597/how-do-i-add-the-exchange-powershell-addin-to-my-powershell-profile?forum=exchange2010
要启用远程Powershell管理,您需要运行类似“winrm quickconfig”的内容,但这是一个系统管理员问题,因为它涉及特定于您的环境的安全性,防火墙规则等。
Exchange管理单元的一些基本信息位于:http://www.techieshelp.com/create-a-user-and-mailbox-in-powershell/
所以在Powershell中它会是这样的:
$user = (Your userid you want to check.)
$TestForUser = get-aduser $user
if(-not $TestForUser){
new-aduser -option -option -option
new-mailbox -option -option -option
}
您可能希望在日志中添加更多内容等等。如果您有多个AD服务器或AD服务器且Exchange服务器不同,则需要确保用户先传播或确保在同一服务器上创建用户/邮箱,这样您就不必等待传播
如果由于系统管理员限制而无法使用模块和管理单元,则可以通过ADSI对象完成用户创建,但这样做更多一些。请记住,这些脚本与Web服务交互而不是直接与ldap交互。因此,如果您通过负载均衡器/防火墙传递,您可能会发现直接ldap查询通过但cmdlet查询没有通过。