J'ai écrit un programme qui ouvre une connexion à un serveur Windows distant afin de gérer les comptes locaux (pas de répertoire actif). Le programme exécute les étapes suivantes:Gestion des utilisateurs sur un serveur Windows distant utilisant C# System.DirectoryServices
- Création d'un utilisateur
- Ajouter l'utilisateur à un groupe
Les deux méthodes utilisent System.DirectoryServices.AccountManagement, ici les deux fonctions:
public void CreateUser()
{
PrincipalContext pc = new PrincipalContext(ContextType.Machine,
"host_ip",
"adminaccount",
"adminpassword");
UserPrincipal up = new UserPrincipal(pc);
up.Name = "user";
up.DisplayName = "user";
up.SetPassword("user");
up.Description = "user";
up.UserCannotChangePassword = true;
up.PasswordNeverExpires = true;
try
{
up.Save();
}
catch (Exception ex)
{
}
try
{
AddToGroup(pc, up);
}
catch (Exception ex)
{
}
}
private void AddToGroup(PrincipalContext pc, UserPrincipal u)
{
string group = "Remote Desktop Users";
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(pc, group);
if (groupPrincipal.Members.Contains(pc, IdentityType.SamAccountName, u.SamAccountName)) //error occurs here
{
return;
}
groupPrincipal.Members.Add(u);
try
{
groupPrincipal.Save();
}
catch (Exception e)
{
}
}
Cela a fonctionné depuis ce matin, la création de l'utilisateur réussit toujours mais je reçois cette erreur à la ligne:
- si (groupPrincipal.Members.Contains (pc, IdentityType.SamAccountName, u.SamAccountName))
Une erreur (1332) a eu lieu alors que les membres de l'énumération groupe. Le SID du membre n'a pas pu être résolu.
Merci pour vous réponses
Merci Matt, vous pourriez avoir raison, je ne peux pas trouver une autre origine. Il existe un moyen de résoudre ce problème selon MS: "Supprimer (en utilisant l'interface graphique) le mauvais SID du groupe résout le problème." Une idée de comment identifier le mauvais SID? – adun