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 :

Créer un Windows Live Account


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut Créer un Windows Live Account
    Bonjour chère communauté,


    Une fois encore, je me tourne vers vous, votre savoir et vos compétences, car, après plusieurs heures de recherches, je ne trouve aucune solution.

    Je ne suis pas sûr du topic (soit sur du Windows, ou du C#, car ça concerne les deux), donc excusez-moi si cette erreur est commise.

    Je dispose d'un serveur WS2008R2, Domain Controller, avec un Active Directory.
    Mon objectif est de créer une adresse email avec un nom de domaine dont je suis propriétaire (par exemple, je dispose du nom de domaine developpez.com, et les adresses seront, par exemple, shini86161@developpez.com).

    J'ai entendu parler de Live@edu, mais le WS2008R2 ne permet pas l'Outlook Syncronisation car ILM ne prend pas cette version.
    J'ai fais des recherches sur Codeplex, et j'ai trouvé qqs projets, mais rien qui ne puisse être utile. Je n'utilise pas de BDD.

    Dooooooonc... J'ai cherché les libraires Microsoft en C# pour créer moi-même ces adresses.
    C'est ici que je tourne sot.
    J'ai la librairie Microsoft.Live.AuthHandler.dll et j'avoue que je ne sais pas comment l'utiliser.
    Je veux juste créer un compte avec une adresse particulière.

    Je vous remercie cordialement d'avance.

    shini86161.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Tout d'abord, j'ai oublié de préciser que Live@Edu est utilisé pour héberger les adresses. En suivant l'exemple, les adresses de types @developpez.com sont hébergée par domains.live.com, grâce à un CNAME.

    Après quelques heures de recherches supplémentaires, j'ai avancé un peu.
    En regardant de plus près les solutions de CodePlex, une solution s'est présentée : utilisé le PowerShell pour accéder à Outlook Live, et ajouter une adresse. C'est pourquoi le projet PowerSharp m'a semblé être le plus judicieux.

    La librairie mentionnée dans le post précédent n'est pas utilisée, mais plutôt System.Management.Automation (qui se trouve dans "C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll"), et Microsoft.LiveAtEdu.Samples.Powershell qui se trouve dans PowerSharp.

    J'ai implémenté le code, modifié pour qu'il s'ajuste à ma plateforme.

    Mon problème se situe lors de la création d'une session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    _runspace.SetCredential(userName, password);
     
    var command = new PSCommand();
    command.AddScript(string.Format(SessionScripts.NewSessionScript));
    var result = _runspace.ExecuteCommand<PSSession>(command);
    return result[0];
    Le username et le password (en SecureString) sont ceux du compte administrateur, et le script revient à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    internal const string NewSessionScript =
    	"New-PSSession -ConfigurationName Microsoft.Exchange -Authentication:Basic -ConnectionUri https://ps.outlook.com/powershell/ -Credential $" +
    	Constants.Credential + " -AllowRedirection";
    Ce que je ne comprends pas, c'est que l'erreur se situe au niveau du "return result[0];"
    System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection
    Je ne comprends pas du tout.

    J'avoue que PowerShell m'est encore inconnu, je suis encore en train de me documenter sur cet outil et son utilisation. Et c'est assez ésotérique.

    shini86161.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Par défaut
    Je ne maitrise pas trop le sujet dont tu parles, ni même power shell. Mais ton erreur par contre est plus simple. La variable result semble complètement vide au moment du return, donc vouloir accéder à result[0], retourne une erreur. L'index 0 n'existe tout simplement pas dans result.

    Est tu certain que _runspace.ExecuteCommand<PSSession>(command); doit retourner quelque chose?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Merci DarkHerumor pour ta réponse.

    Oui, ExecuteCommand<PSSession> retourne une collection de PSObject, des sessions ici.

    Voici la méthode en question :

    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
    public static Collection<T> ExecuteCommand<T>(this Runspace runspace, PSCommand command)
    {
        if (command == null)
            throw new ArgumentOutOfRangeException("command");
     
        if (runspace == null)
            throw new ArgumentOutOfRangeException("runspace");
     
        using (var ps = PowerShell.Create())
        {
            ps.Commands = command;
            ps.Runspace = runspace;
     
            return ps.Invoke<T>();
        }
    }
    C'est quand même dommage que cette API soit si peu documentée...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Par défaut
    L'erreur se situe donc dans la commande que tu execute via PowerShell.Execute, car visiblement ton tableau result est vide sur le retour de la méthode.

    Je ne connais malheureusement pas grand chose à PowerShell

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Citation Envoyé par DarkHerumor Voir le message
    L'erreur se situe donc dans la commande que tu execute via PowerShell.Execute, car visiblement ton tableau result est vide sur le retour de la méthode.

    Je ne connais malheureusement pas grand chose à PowerShell
    Merci tout de même de ton attention et de tes réponses DarkHerumor

    Oui, visiblement, c'était ça. J'ai opté pour une autre solution.
    Le script Powershell fonctionne bien une fois qu'il est entré à la main. J'ai donc essayé de l'ajouter via du C# comme suit :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
                PSCredential credential = new PSCredential(adminUsrName_, password);
                Runspace runspace = RunspaceFactory.CreateRunspace();
     
                PowerShell powershell = PowerShell.Create();
                runspace.Open();
                powershell.Runspace = runspace;
     
                // Command to initialize the credentials
                PSCommand cmdCred = new PSCommand();
                cmdCred.AddCommand("Set-Variable");
                cmdCred.AddParameter("Name", "Cred");
                cmdCred.AddParameter("Value", credential);
                powershell.Commands = cmdCred;
                powershell.Invoke();
     
                // Command to initialize the credentials
                PSCommand cmdSession = new PSCommand();
                string script =
                    "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ " +
                    "-Credential $Cred -Authentication Basic -AllowRedirection";
                cmdSession.AddScript(script);
                powershell.Commands = cmdSession;
                powershell.Invoke();
     
                // Command to import the session
                PSCommand cmdImport = new PSCommand();
                script = "Import-PSSession $Session";
                cmdImport.AddScript(script);
                powershell.Commands = cmdImport;
                powershell.Invoke();
     
                // Command to initialize the user's password
                PSCommand cmdPwd = new PSCommand();
                cmdPwd.AddCommand("Set-Variable");
                cmdPwd.AddParameter("Name", "password");
                cmdPwd.AddParameter("Value", userPassword);
                powershell.Commands = cmdPwd;
                powershell.Invoke();
     
                // Command to create the mail-box
                PSCommand cmdMailBox = new PSCommand();
                string display = firstname_ + " " + lastname_;
                script =
                    "New-Mailbox -WindowsLiveID" + liveId +
                    " -Alias" + username_ +
                    " -Name" + username_ +
                    " -Password $password " +
                    " -FirstName" + firstname_ +
                    " -LastName" + lastname_ +
                    " -DisplayName " + display;
                cmdMailBox.AddScript(script);
                powershell.Commands = cmdMailBox;
                powershell.Invoke();
                //Remove-PSSession $Session
     
                // Command to remove the session
                PSCommand cmdRemove = new PSCommand();
                script =
                    "Remove-PSSession $Session";
                cmdRemove.AddScript(script);
                powershell.Commands = cmdRemove;
                powershell.Invoke();
    Mais rien ne se passe. Pas d'erreurs, pas d'ajout.
    Même situation, mais sans réponse.

    EDIT:
    Aucun "powershell.Invoke();" ne renvoit quoi que soit. Le retour est toujours vide. Une idée ?


    Merci d'avance.

    shini86161.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Encore moi. Pour être sûr, j'ai testé une autre commande, pour savoir si le code merdait, ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                PSCredential credential = new PSCredential(adminUsrName_, password);
                Runspace runspace = RunspaceFactory.CreateRunspace();
     
                PowerShell powershell = PowerShell.Create();
                runspace.Open();
                powershell.Runspace = runspace;
     
                // Command to initialize the credentials
                PSCommand cmdCred = new PSCommand();
                cmdCred.AddCommand("Get-Process");
                powershell.Commands = cmdCred;
                powershell.Invoke();
    Et ça fonctionne.
    Du coup, je ne comprends vraiment pas.

    Merci d'avance de votre aide si précieuse, je ne sais plus quoi faire.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut Connexion à Outlook Live
    Visiblement, le problème n'est pas dans l'exécution d'un script (on l'a vu plus haut), mais bien lors de la connexion avec Outlook Live, 'fin, Exchange Online maintenant.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
            public static string CreateMail(
                string username_,
                string firstname_,
                string lastname_,
                string pwd_,
                string adminUsrName_,
                string adminPwd_,
                string domain_)
            {
                string liveId = firstname_ + "." + lastname_ + domain_;
     
                char[] passwordChars = adminPwd_.ToCharArray();
                SecureString password = new SecureString();
                foreach (char c in passwordChars)
                    password.AppendChar(c);
     
                PSCredential credential = new PSCredential(adminUsrName_, password);
     
     
                string liveIdconnectionUri = "http://exchange.Domain.local/Powershell?serializationLevel=Full";
                string live = "https://ps.outlook.com/powershell/";
                Runspace runspace;
                try
                {
                    WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(live)),                                             "http://schemas.microsoft.com/powershell/Microsoft.Exchange",
                                                                                 credential);
                    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
                    runspace = RunspaceFactory.CreateRunspace(connectionInfo);
                    runspace.Open();
                }
                catch (PSRemotingTransportRedirectException ex)
                {
                    return "ERROR : " + ex.Message;
                }
                PowerShell powershell = PowerShell.Create();
                powershell.Runspace = runspace;
                ICollection<PSObject> results;
                StringBuilder stringBuilder = new StringBuilder();
     
                PSCommand cmdPwd = new PSCommand();
                cmdPwd.AddCommand("Set-Variable");
                cmdPwd.AddParameter("Name", "password");
                cmdPwd.AddParameter("Value", userPassword);
                powershell.Commands = cmdPwd;
                results = powershell.Invoke();
                stringBuilder.AppendLine("SET-VARIABLE");
                if (results.Count != 0)
                {
                    foreach (PSObject obj in results)
                        stringBuilder.AppendLine(obj.ToString());
                }
     
                // Command to create the mail-box
                string display = firstname_ + " " + lastname_;
                PSCommand cmdSession = new PSCommand();
                cmdSession.AddCommand("New-Mailbox");
                cmdSession.AddParameter("WindowsLiveID", liveId);
                cmdSession.AddParameter("Alias", userPassword);
                cmdSession.AddParameter("Name", userPassword);
                cmdSession.AddParameter("Password", "password");
                cmdSession.AddParameter("FirstName", firstname_);
                cmdSession.AddParameter("LastName", lastname_);
                cmdSession.AddParameter("DisplayName", display);
                powershell.Commands = cmdSession;
                results = powershell.Invoke();
                stringBuilder.AppendLine("NEW-MAILBOX");
                if (results.Count != 0)
                {
                    foreach (PSObject obj in results)
                        stringBuilder.AppendLine(obj.ToString());
                }
     
                return stringBuilder.ToString();
            }
    Si je comprends bien, le problème vient de l'objet WSManConnectionInfo, qui gère la connexion. Il est l'équivalent du "New-PSSession".

    Je ne comprends pas pourquoi, sur tous les sites sur lesquels je trouve ce bout de code, ils n'utilisent pas l'objet PSSession fournit par Automation.dll.

    En attendant, ce code plante, et me renvoie l'erreur suivante : Redirect location reported: .. Ce qui, visiblement, est une erreur de configuration dans IIS.
    Encore une fois, je ne sais pas où je vais.

    Je regarderai à ça demain.

    Merci de lire, et si vous répondez, de votre aide.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    J'ai trouve ceci.

    J'ai modifié l'URI car je n'ai pas de serveur Exchange local, mais en ligne, donc https://ps.outlook.com/powershell/.

    Sinon, j'ai gardé le même.
    Et encore une fois, j'ai un problème lors du result[0].

    En bref,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collection<PSSession> results = powershell.Invoke<PSSession>();
    Cette méthode ne retourne rien.

    Pourquoi ?

    Ca fait deux semaines que je me pète les dents sur ce truc à la noix.
    *est à bout de nerfs*

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    J'ai trouvé la solution.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
           public static string CreateMail(
                string username_,
                string firstname_,
                string lastname_,
                string pwd_,
                string adminUsrName_,
                string adminPwd_,
                string domain_)
            {
                string liveId = firstname_ + "." + lastname_ + "@" + domain_;
     
                char[] passwordChars = adminPwd_.ToCharArray();
                SecureString password = new SecureString();
                foreach (char c in passwordChars)
                    password.AppendChar(c);
     
                char[] userPasswordChars = pwd_.ToCharArray();
                SecureString userPassword = new SecureString();
                foreach (char c in userPasswordChars)
                    userPassword.AppendChar(c);
     
                PSCredential credential = new PSCredential(adminUsrName_, password);
     
                // Set the connection Info
                string shellUri = "https://pod51013psh.outlook.com/PowerShell-LiveID?PSVersion=2.0\0";
                string temp = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
                Runspace runspace;
     
                WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(shellUri)), temp,
                                                                                credential);
                connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
                runspace = RunspaceFactory.CreateRunspace(connectionInfo);
     
                PowerShell powershell = PowerShell.Create();
                StringBuilder stringBuilder = new StringBuilder();
     
                try
                {
                    string display = firstname_ + " " + lastname_;
     
                    PSCommand cmdMailBox = new PSCommand();
                    cmdMailBox.AddCommand("New-Mailbox");
                    cmdMailBox.AddParameter("WindowsLiveID", liveId);
                    cmdMailBox.AddParameter("Alias", username_);
                    cmdMailBox.AddParameter("Name", username_);
                    cmdMailBox.AddParameter("Password", userPassword);
                    cmdMailBox.AddParameter("FirstName", firstname_);
                    cmdMailBox.AddParameter("LastName", lastname_);
                    cmdMailBox.AddParameter("DisplayName", display);
                    powershell.Commands = cmdMailBox;
                    runspace.Open();
                    powershell.Runspace = runspace;
                    powershell.Invoke();
     
                }
                catch (Exception ex)
                {
                    return "ERROR : " + ex.Message;
                }
     
                runspace.Dispose();
                powershell.Dispose();
     
                return stringBuilder.ToString();
            }
    Pas besoin d'initialiser une session, elle est dans le Runspace. Tout mon problème venait de là.

    Merci quand même.

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

Discussions similaires

  1. [PowerShell] Créer un Windows Live Account
    Par shini86161 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 19/04/2011, 18h35
  2. [Windows Live Messenger]question sur les messages hors connexion
    Par jmclej dans le forum Messagerie instantanée
    Réponses: 9
    Dernier message: 21/06/2006, 13h34
  3. [VB.NET] Comment créer boutons windows???
    Par fdiedler dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/02/2005, 18h57

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