通过远程exchange 2007服务器上的webservice为用户创建邮箱。(C#)

通过远程exchange 2007服务器上的webservice为用户创建邮箱。(C#),c#,web-services,ldap,exchange-server,email,C#,Web Services,Ldap,Exchange Server,Email,编辑 我几乎收到了它,因为找不到exchange DB,所以出现了错误消息。我在另一台服务器上运行该服务,然后是Exchange,因此我认为我必须使用UNC路径。MyServer01\First Storage Group\Mailbox Database.edb无法工作,但 嗨! 我在这里感到沮丧,感到一阵头痛,我几乎要把我的电脑扔出窗外了 这就是问题所在,我想通过Sharepoint在Active Directory中创建一个新用户,在Sharepoint列表下面运行一个worflow,该

编辑 我几乎收到了它,因为找不到exchange DB,所以出现了错误消息。我在另一台服务器上运行该服务,然后是Exchange,因此我认为我必须使用UNC路径。MyServer01\First Storage Group\Mailbox Database.edb无法工作,但



嗨! 我在这里感到沮丧,感到一阵头痛,我几乎要把我的电脑扔出窗外了

这就是问题所在,我想通过Sharepoint在Active Directory中创建一个新用户,在Sharepoint列表下面运行一个worflow,该worflow捕获变量并将其发送到在Active Directory中创建用户的Web服务。这非常有效,但是用户还需要一个邮箱。 那么,我们该怎么办?我们将mail属性设置为所需的电子邮件地址,并找到属性“Create Mailbox”。。。。说什么?它在哪里?不,它已经不存在了,微软决定它需要更复杂,现在唯一的方法就是使用powershell垃圾

这就是我来这里的原因,我在谷歌上搜索了一些信息,找到了一些代码,这些代码应该可以实现这一点,但是,这就是我遇到的问题,Web服务不是在Exchange服务器上运行的,而是在另一台服务器上运行的,Web服务需要连接到Exchange服务器才能运行powershellshizzle。。。找不到这方面的任何信息,找不到任何例子等等

赫莱普。。。F1。。。等

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;
using Microsoft.PowerShell.Commands;  
using System.Web.Services;
using System.DirectoryServices;

namespace WebService1
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{

    [WebMethod]
    public void CreateADUser(string domain, string domainPostFix, string firstName, string emailaddress, string lastName, string department, string loginName, string password)
    {
        DirectoryEntry AD = null;
        DirectoryEntry NewUser = null;

        AD = new DirectoryEntry("LDAP://OU=Users,DC=" + domain + ",DC=" + domainPostFix);

        NewUser = AD.Children.Add("CN=" + firstName + " " + lastName, "user");
        NewUser.Properties["samAccountName"].Add(loginName);
        NewUser.Properties["name"].Add(firstName + " " + lastName);
        NewUser.Properties["displayname"].Add(firstName + " " + lastName);
        NewUser.Properties["givenName"].Add(firstName);
        NewUser.Properties["sn"].Add(lastName);
        NewUser.Properties["userprincipalname"].Add(loginName + "@" + domain + "." + domainPostFix);
        NewUser.CommitChanges();

        NewUser.Invoke("SetPassword", new object[] { password });

        NewUser.CommitChanges();

        // E-mail shizzle, don't understand it yet, hopefully it works, if not, don't blame me -Erik
        RunspaceConfiguration runspaceConf = RunspaceConfiguration.Create();
        PSSnapInException PSException = null;
        PSSnapInInfo info = runspaceConf.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out PSException);
        Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConf);
        runspace.Open();
        Pipeline pipeline = runspace.CreatePipeline();
        Command command = new Command("New-Mailbox");
        command.Parameters.Add("Name", "TestName");

        //Enabling user account
        int val = (int)NewUser.Properties["userAccountControl"].Value;
        NewUser.Properties["userAccountControl"].Value = val & ~0x2;
        NewUser.CommitChanges();

        NewUser.Close();


    }
使用系统;
使用System.Collections.Generic;
使用System.Collections.Specialized;
使用System.Linq;
使用System.Web;
使用系统、管理、自动化;
使用System.Management.Automation.Host;
使用System.Management.Automation.Runspaces;
使用Microsoft.PowerShell.com命令;
使用System.Web.Services;
使用System.DirectoryServices;
命名空间WebService 1
{
/// 
///服务1的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
//[System.Web.Script.Services.ScriptService]
公共类服务1:System.Web.Services.WebService
{
[网络方法]
public void CreateADUser(字符串域、字符串域后缀、字符串名、字符串电子邮件地址、字符串姓氏、字符串部门、字符串登录名、字符串密码)
{
DirectoryEntry AD=null;
DirectoryEntry NewUser=null;
AD=new DirectoryEntry(“LDAP://OU=Users,DC=“+domain+”,DC=“+domainPostFix”);
NewUser=AD.Children.Add(“CN=“+firstName+”“+lastName,”user”);
NewUser.Properties[“samAccountName”].Add(loginName);
NewUser.Properties[“name”].Add(firstName+“”+lastName);
NewUser.Properties[“displayname”].Add(firstName+“”+lastName);
NewUser.Properties[“givenName”].Add(firstName);
NewUser.Properties[“sn”].Add(lastName);
NewUser.Properties[“userprincipalname]”。添加(loginName+“@”+域+“+域后缀);
NewUser.CommitChanges();
Invoke(“SetPassword”,新对象[]{password});
NewUser.CommitChanges();
//电子邮件垃圾,还不明白,希望它能工作,如果不能,不要怪我-埃里克
RunspaceConfiguration runspaceConf=RunspaceConfiguration.Create();
PSSnapInException PSException=null;
PSSnapInInfo info=runspaceConf.AddPSSnapIn(“Microsoft.Exchange.Management.PowerShell.Admin”,out-PSException);
Runspace Runspace=RunspaceFactory.CreateRunspace(runspaceConf);
Open();
Pipeline Pipeline=runspace.CreatePipeline();
命令=新命令(“新邮箱”);
添加(“Name”、“TestName”);
//启用用户帐户
int val=(int)NewUser.Properties[“userAccountControl”].Value;
NewUser.Properties[“userAccountControl”].Value=val&~0x2;
NewUser.CommitChanges();
NewUser.Close();
}

运行此应用程序的计算机需要安装Exchange管理工具,以便Exchange管理管理单元可用


运行此应用程序的帐户还需要具有Exchange的管理权限。

运行此应用程序的计算机需要安装Exchange管理工具,以便Exchange管理管理单元可用

您运行它的帐户还需要具有Exchange的管理权限。

文章解释了发生的情况。基本上,Exch2003中有一种称为RUS的东西,它为“部分配置”用户创建了邮箱。因此,您可以通过LDAP创建一个用户,RUS将在下一次访问时接收新用户通过创建邮箱并修复其其他广告属性,通过并完成此过程

现在,RUS在2007年消失了,但是您可以通过安排一些cmdlet定期运行(例如使用“at”命令)来获得相同的功能在Exchange服务器上。

post解释了发生了什么。基本上,Exch2003中有一种称为RUS的东西,它为“部分配置”用户创建了邮箱。因此,您可以通过LDAP创建一个用户,RUS将在下一次访问中接收新用户,并通过创建邮箱和修复i来完成此过程ts其他广告属性

现在,RUS在2007年消失了,但是您可以通过安排一些cmdlet在Exchange服务器上定期运行(例如使用“at”命令)来获得相同的功能