2012-04-26 3 views
0

Donc, j'ai un problème à obtenir ma fonction pour produire ses propres données après la deuxième fois que je l'exécute. La première fois que je produis la commande GetUsers, à condition que mon nom d'utilisateur et mon mot de passe soient corrects, cela retournera une liste avec mes utilisateurs. Si je l'exécute à nouveau, quel que soit le nom d'utilisateur ou le mot de passe que j'utilise, les mêmes utilisateurs reviendront. Je suis sûr que mon code est assez en désordre, mais j'ai essayé de le faire disparaître. En ce qui concerne un petit arrière-plan, je me considère comme un programmeur débutant donc le problème pourrait très bien être quelque chose de vraiment basique.Pourquoi Powershell ne nettoie-t-il pas?

Merci!

public ArrayList GetUsers(string user, string pass) 
     { 
      InitialSessionState iss = InitialSessionState.CreateDefault(); 

      iss.ImportPSModule(new[] { "MSOnline" }); 
      using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss)) 
      { 
       myRunSpace.Open(); 
       using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) 
       { 
        ArrayList available_users = new ArrayList(); 

        //create Powershell runspace 

        powershell.Runspace = myRunSpace; 

        Command connect = new Command("Connect-MsolService"); 
        System.Security.SecureString secureString = new System.Security.SecureString(); 
        string myPassword = pass; 
        foreach (char c in myPassword) 
         secureString.AppendChar(c); 

        connect.Parameters.Add("Credential", new PSCredential(user, secureString)); 
        powershell.Commands.AddCommand(connect); 

        Collection<PSObject> results = null; 
        results = powershell.Invoke(); 
        powershell.Commands.Clear(); 

        Command getuser = new Command("Get-MsolUser"); 
        powershell.Commands.AddCommand(getuser); 
        results = null; 

        powershell.Stop(); 

        results = powershell.Invoke(); 

        foreach (PSObject item in results) 
        { 
         string userprincipalname = item.Properties["UserPrincipalName"].Value as string; 
         available_users.Add(userprincipalname); 
        } 

        powershell.Dispose(); 
        myRunSpace.Dispose(); 

        powershell.Runspace.Dispose(); 
        powershell.Runspace.Close(); 
        myRunSpace.Close(); 
        return available_users; 
       } 
      } 
     } 
+0

une solution finale avec le code source complet à ce sujet? – Kiquenet

Répondre

0

avez-vous essayé de supprimer ou d'annuler explicitement le type available_users? Je ne pense pas que ce serait nécessaire, mais ...

Questions connexes