IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

PowerShell, C#, Exchange 2010


Sujet :

C#

  1. #1
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut PowerShell, C#, Exchange 2010
    Bonjour ...je ne sais pas si je suis au meilleur endroit pour poser cette question mais C# est le langage que je pratqiue ...

    Suis je obligé de passer par PowerShell pour céer une boîte aux lettres dans exchange 2010 ?

    Je voudrais le faire via C# (je ne connais pas PowerShell....)
    est ce possible ?



    P.JEAN

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Bonjour,
    ce n'est peut être plus valide mais à essayer : lien

  3. #3
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Pas bon ....
    Je viens de trouver cela :

    Collaboration Data Objects for Exchange Management (CDOEXM) is not included in Exchange 2007 or Exchange 2010. We recommend that you migrate your applications that use CDOEXM to use Exchange PowerShell commands
    donc on ne peut plus utiliser CDOEXM

    ...

    MERCI POUR TA Reponse qd même ...

    P.JEAN

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    J'ai bien peur pour toi (même si je ne le confirme pas à 100 %) que tu sois obligé de passer par PowerShell.

    Par contre, si tu veux conserver un point d'entrée unique, à savoir ton application .NET (si elle fait d'autres opérations), rien ne t'empêche d'exécuter du PowerShell depuis ton application (et pas dans un coin à part).

    Une solution ici (que j'ai déjà utilisée et qui fonctionne bien).

  5. #5
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Merci
    Merci _Max_

    déjà ta réponse découpe le problème en deux parties et me donne la solution de la première à savoir comment exécuter du powershell dans c# , ce qui semble simple ...je n'ai plus qu'à trouver le script powershell qui va bien pour céer mes Boîtes aux lettres ...

    merci
    P.JEAN

  6. #6
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Ca avance mais ....
    J'avance ... en suivant l'exemple donné par _Max_ j'ai crée cette fonction qui ...fonctionne (...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    public string ExecuterUnScript(string TexteDuScript)
    {
        //Creation Espace Powershell
     
        Runspace Espace = RunspaceFactory.CreateRunspace();
     
        //Ouverture
     
       Espace.Open();
     
        // create a pipeline and feed it the script text
     
        Pipeline UnPipeLine = Espace.CreatePipeline();
        UnPipeLine.Commands.AddScript(TexteDuScript);
     
        UnPipeLine.Commands.Add("Out-String");
     
        //Execute le script
        Collection <PSObject> Resultats = UnPipeLine.Invoke();
     
     
        //Ferme l'Espace PowerShell
        Espace.Close();
     
        // convert the script result into a single string
        StringBuilder stringBuilder = new StringBuilder();
     
        foreach (PSObject obj in Resultats)
        {
            stringBuilder.AppendLine(obj.ToString());
        }
     
        UnPipeLine.Dispose();
        Espace.Dispose();
     
        return stringBuilder.ToString();
    }

    et en suivant cet article http://technet.microsoft.com/fr-fr/l...UseShellLinked de technet j'ai pondu cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     public string CreationBoîteAuxLettresExchange(string Nom, string Prenom, string UserAD, string MotDePasseUserAD, string BaseDeDonneesExchange, string Domaine, string Administrateur, string MotDePasseAdministrateur, string ControleurDeDomaine)
        {
            //BASE EXCHANGE = Mailbox Database 0113932642
            string NomAffiche = Nom + " " + Prenom;
            string Alias = Prenom + " " + Nom;
            string AdresseEmail = Prenom + "." + Nom + "@" + Domaine;
            string CompteAD  = Domaine + "\\" + UserAD;
            string CompteAdmin  = Domaine + "\\" + Administrateur;
     
            string Script = "New-Mailbox -Database " + BaseDeDonneesExchange + " -Name " + NomAffiche + " -LinkedDomainController " + ControleurDeDomaine + " -LinkedMasterAccount " + CompteAD + " -OrganizationalUnit Users -UserPrincipalName" + AdresseEmail + "-LinkedCredential (Get-Credential " + CompteAdmin + ")";
            return ExecuterUnScript(Script);
        }
    qui construit un script PowerShell pour en demander l'execution à ma première fonction. Tout ceci est installé sur le serveur web de mon intranet ...

    Ma config :

    Un serveur de domaine en W2008 R2 : SRB-01
    un serveur web en W2008 : SRV-WEB-INTRA
    un serveur exchange 2010 en W2008: SRV-EXCHANGE

    Quand je teste sur mon serveur web j'ai l'erreur :

    Sys.WebForms.PageRequestManagerServerErrorException: Le terme «*New-Mailbox*» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès est correct et réessayez.
    Je comprend car si je tape la commande sur une invite powershell de mon serveur Exchange lui il la reconnait ...

    Je suis un peu perdu ...comment faire ? Je veux créer mes boîtes aux lettres à partir de mon site Intranet ...

    comment m'y prendre ???

    Merci pour vos réponses ...

  7. #7
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Le script PS que tu exécutes dans ton appli C#, tu le fais bien s'exécuter sur la machine distante (celle qui héberge ton Exchange) ?

    Si tu le fais s'exécuter en local sur ton serveur Web, ça me semble logique que ça plante . Il faut donc que l'appli C# présente sur le serveur Web exécute le PowerShell sur la machine distante, peut-être via une connexion WMI au préalable (ou autre chose).

  8. #8
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Je vois ....
    j'ai trouvé des docs sur WMI avec powerShell ...je vais potasser....

    Merci pour la piste ...

    P.JEAN

  9. #9
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut suite .....
    Je change mon fusil d'épaule ....

    WMI ..trop compliqué ...pas trop le temps de potasser pour mettre en oeuvre ...


    Point 1 : Mon script de création de bal fonctionne
    point 2 : Ma fonction pour lancer un script powershell à partir de c# fonctionne

    Je vais faire un service windows qui tournera sur le serveur exchange et regardera toutes les x minutes mes dossiers sans Email et qui appelera ma fonction pour leur creer une boite aux lettres ...

    Maintenant mon problème est de lancer mon script dans exchange management shell pour que mes commandes soient executée car dans le powershell "normal" ...ca marche pas ....

    Comment faire ?

    Merci encore pour votre aide ...


    P.JEAN

  10. #10
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Réponse ....
    je pense avoir trouvé la réponse içi : http://msdn.microsoft.com/en-us/library/bb332449(v=exchg.80).aspx

    Je teste ...et je mettrai la réponse en ligne si ça marche ...

    P.JEAN

  11. #11
    Membre actif Avatar de zzzThibaut
    Inscrit en
    Février 2007
    Messages
    225
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2007
    Messages : 225
    Points : 278
    Points
    278
    Par défaut une solution?
    Bonjour

    As-tu trouver une solution à ton problème?...

    Moi je suis confronté plus ou moins au même problème.
    Petite explication en deux mots, j'ai deux serveurs Exchange 2010 SP1 (hosted mode) et une machine Windows 7 avec les Exchangement Management tools installés.
    Sur la machine Windows 7, je démarre Powershell (pas Exchange Management Console), je chrage le snapin qui va bien "add-pssnapin Microsoft.Exchange.Management.Powersheel.E2010" et ensuite je récupère les serveurs actifs (get-exchangeserver)... tou va bien jusque là. Malheureusement, j'essaye de faire la même chose via une application c#, je créé mon Runspace, j'y ajoute le snappin, et j'inque mon pipeline avec la command "get-exchangeserver" et je reçois une exception "The value cannot be null. Parameters name: Peremeter"...

    Si quelqu'un à une idée... je suis preneur.
    merci d'avance

    Thibaut

  12. #12
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Oui
    oui j'ai trouvé la solution pour créer des boîtes aux lettres exchange avec c# dans une application ASPNET .... Je n'ai pas trop le temps de me replonger dedans pour te répondre de suite mais je mettrai mon code en ligne , à la suite de ce message, en début de semaine prochaine ....


    Cordialement ...

    P.JEAN

  13. #13
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Solution
    Voici ma solution :

    Rappel du contexte :

    J’ai un site Intranet en C# ASPNET qui est sur un serveur 2008 IIS 7.0

    Le principe : Je lance un script Power Shell de création de BAL sur mon serveur Exchange à partir de mon serveur Web

    En premier : Il faut autoriser l’exécution de scripts power Shell sur le serveur Web

    Pour cela il faut lancer un fenêtre d’exécution en tapant : powershell = > sur l’invite de commande Windows

    Puis il faut taper la commande suivante : SET-EXECUTIONPOLICY REMOTESIGNED




    Le code :

    Le code qui suit part du principe que le User AD est existant quand on lance la création de sa BAL …

    J’ai une première fonction qui construit le script POWERSHELL à lancer sur le serveur Exchange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public bool CreationBALPourProfilExistant(string Nom, string Prenom, string UserAD)
        {
     
            try
            {
                //ON SUPPRIME TOUS LES ESPACES DANS LE NOM ET LE PRENOM DE LA PERSONNE
                Nom = Nom.Trim();
                Prenom = Prenom.Trim();
                Nom = Nom.Replace(" ", "");
                Prenom = Prenom.Replace(" ", "");
     
                //LESPARAMETRES EST UN OBJET QUI CONTIENT TOUT LES PARAMETRES DONT J’AI BESOIN DANS MON SITE DANS CE CAS C’EST LE NOM DE MON DOMAINE
                string CompteAD = LesParametres.Domaine + "\\" + UserAD;
                string Alias = Nom + Prenom + "-" + UserAD;
                string ScriptAExecuter = "Enable-MailBox -Identity " + CompteAD + " -Alias " + Alias;
                return ExecuterUnScriptSurLeServeurExchange(ScriptAExecuter);
            }
            catch (Exception Erreur)
            {
                Journalisation("Bug - Erreur PowerShell.cs - Fonction CreationBALPourUserExistant()", Erreur.ToString(), 0);
                throw Erreur;
            }
        }
    Elle lance cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    public bool ExecuterUnScriptSurLeServeurExchange(string ScriptPowerShellAExecuter)
    {
        try
        {
            string Script = string.Empty;
     
     
    //LesParametres.LoginAdministrateur = > Login de l’administrateur du domaine
          //LesParametres.MotDePasseAdministrateur => Mot de passe administrateur du domaine
    //LesParametres.NomDuServeurExchange=> Nom du serveur Exchange
     
     
            Script = "$MotDePasse = convertto-securestring \"" + LesParametres.MotDePasseAdministrateur + "\" -asplaintext -force";
            Script = Script + "\r $Profil = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList " + LesParametres.LoginAdministrateur + ",$MotDePasse";
            Script = Script + "\r $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri Http://" + LesParametres.NomDuServeurExchange + "/POWERSHELL -Credential $Profil";
            Script = Script + "\r Import-PSSession $Session ";
     
            Script = Script + "\r" + ScriptPowerShellAExecuter;
     
            //Creation Espace PowerShell sur le serveur WEB
            Runspace Espace = RunspaceFactory.CreateRunspace();
     
            //Ouverture
            Espace.Open();
     
            //Creation Pipeline et envois du script
            Pipeline UnPipeline = Espace.CreatePipeline();
            UnPipeline.Commands.AddScript(Script);
     
            UnPipeline.Commands.Add("Out-String");
            UnPipeline.Invoke();
     
            //Fermeture
            Espace.Close();
     
            //Fermeture & Nettoyage
            Espace.Close();
     
            UnPipeline.Dispose();
            Espace.Dispose();
     
            return true;
        }
        catch (Exception Erreur)
        {        
            Journalisation("Bug - Erreur PowerShell.cs - Fonction ExecuterUnScriptSurLeServeurExchange()", Erreur.ToString(), 0);
            return false;
            throw Erreur;
        } 
    }
    ATTENTION : EN DEBUGGAGE SUR LE POSTE DE DEV CA MARCHE PAS …en tout cas moi j’ai pas réussi à le faire marcher sur le mien ..mais ca marche sur le serveur web …

    Attention : Problème si plusieurs contrôleurs de domaine sur le même sous-réseau
    Attention : Problème si création de user AD et création dans la foulé de sa boîte aux lettres ..il semble que le contrôleur de domaine ne met pas assez vite le user à disposition d’exchange …
    Il faut faire l’opération en deux fois …En premier une procédure pour créer le User AD et ensuite un procédure pour créer la BAL

    Voilà si ca fait avançer le schimilli..blick de certains c'est toujours ça de gagné ...


    P.JEAN

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 100
    Points : 125
    Points
    125
    Par défaut
    Merci pour cette réponse rapide.

    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/12/2011, 15h56
  2. [PowerShell - ASP.NET] Ajouter le PSSnapin Exchange 2010
    Par DevBaldwin dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/10/2011, 18h20
  3. Réponses: 0
    Dernier message: 07/10/2009, 15h03
  4. Envoyez des SMS depuis Microsoft Outlook et Exchange 2010
    Par Tofalu dans le forum Actualités
    Réponses: 7
    Dernier message: 01/10/2009, 10h45
  5. Réponses: 2
    Dernier message: 12/05/2009, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo