将用户添加到Exchange Server 2010并使用Powershell创建邮箱时出现问题

时间:2014-05-21 13:44:15

标签: c# .net powershell exchange-server-2010

我的要求是在我的应用程序中创建用户时,我需要在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位于不同的服务器上,但两者都在同一个域中。

如果有人遇到此问题并找到解决方案,请提供帮助。

3 个答案:

答案 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查询没有通过。