2009-05-20 7 views
1

EDIT Je l'ai eu presque, ayant et message d'erreur maintenant qu'il ne peut pas trouver le DB d'échange. J'exécute le service sur un serveur différent puis échange donc je présume que je dois employer un chemin UNC. MyServer01 \ Premier groupe de stockage \ boîte aux lettres Database.edb ne fonctionne pas si ...Créez une boîte aux lettres pour un utilisateur via un service Web sur un serveur Exchange 2007 distant. (C#)



Salut! Je suis frustré ici, sentant un mal de tête énorme à venir et je suis presque au point de jeter mon PC par la fenêtre ...

C'est le problème, je veux créer un nouvel utilisateur dans le Active Directory via Sharepoint, sous la liste Sharepoint, exécute un flux de travail qui intercepte les variabeles et les envoie à un service web qui crée l'utilisateur dans le répertoire actif. Cela fonctionne parfaitement, mais l'utilisateur a également besoin d'une boîte aux lettres. Alors, que faisons-nous? Nous définissons la propriété mail à l'adresse e-mail nécessaire et trouvons la propriété "Create Mailbox" .... dites whut? où est-ce? NOOOOOESSS il n'existe plus, MS a décidé qu'il doit être plus compliqué et maintenant la seule façon de faire cela est l'utilisation de la merde powershell ...

Alors c'est pourquoi je suis ici, j'ai googlé quelques informations à ce sujet et trouvé un code qui devrait faire l'affaire, mais, et c'est où je suis coincé, le webservice ne fonctionne pas sur le serveur Exchange mais sur un serveur différent, le webservice doit se connecter au serveur d'échange pour exécuter le powershellshizzle ... peut « t trouver toute information sur ce sujet, ne peut pas trouver des exemples et ainsi de suite ...

hlep ... F1 ... etc

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(); 


    } 

Répondre

1

This L'article explique ce qui se passe. Fondamentalement, il y avait quelque chose dans Exch2003 appelé RUS qui a créé la boîte aux lettres pour les utilisateurs 'provisionnés'. Ainsi, vous pouvez créer un utilisateur via LDAP, et le RUS sélectionne le nouvel utilisateur lors de sa prochaine passe et termine le processus en créant la boîte aux lettres et en corrigeant ses autres attributs AD. Maintenant, en 2007, le RUS est parti, mais vous pouvez obtenir la même fonctionnalité en programmant des cmdlets à exécuter périodiquement (par exemple avec la commande 'at') sur le serveur Exchange.

0

La machine vous exécutez cette application sur les outils de gestion Exchange doivent être installés, de sorte que le composant logiciel enfichable de gestion Exchange est disponible.

Le compte sur lequel vous l'exécutez doit également disposer de privilèges administratifs pour Exchange.

Questions connexes