Je dois interroger le contrôleur de domaine actuel, probablement primaire pour modifier le mot de passe de l'utilisateur. P>
(p) Nom CC doit être complètement qualifié, c'est-à-dire qualifié, c'est-à-dire Comment peut-il être fait en utilisant c #? p> dc = pdc, dc = exemple, dc = com code> (Comment nommer correctement cette notation?) P>
4 Réponses :
(nécessite system.directoryservices.accountmanagement.dll):
Cela ne fonctionnera pas pour une situation croisée (par exemple, votre machine ne fait pas partie du domaine où le contrôleur de domaine existe). Voir ma réponse pour une telle solution.
Si vous souhaitez interagir l'Active Directory, vous ne devriez pas avoir à savoir où FSMO Les rôles sont pour la plupart. Si vous souhaitez modifier la topologie de votre programme de votre programme (je ne le ferais pas), regardez le domaineController classe.
Si vous souhaitez modifier un mot de passe de l'utilisateur, vous pouvez appeler ces actions sur l'objet utilisateur et Active Directory s'assurera que les modifications sont correctement. répliqué. P>
copié de http: // www.rootsilver.com/2007/08/how-to-change-a-user-password p>
Comment pensez-vous, puis-je changer mon mot de passe actuel en utilisant mon propre nom d'utilisateur et mon mot de passe actuel?
Nous utilisons quelque chose comme ceci pour nos applications internes.
devrait renvoyer quelque chose comme dc = d, dc = r, dc = abc, dc = com code> p>
public static string RetrieveRootDseDefaultNamingContext()
{
String RootDsePath = "LDAP://RootDSE";
const string DefaultNamingContextPropertyName = "defaultNamingContext";
DirectoryEntry rootDse = new DirectoryEntry(RootDsePath)
{
AuthenticationType = AuthenticationTypes.Secure;
};
object propertyValue = rootDse.Properties[DefaultNamingContextPropertyName].Value;
return propertyValue != null ? propertyValue.ToString() : null;
}
Oui tu as raison. Nous avons normalement un code de journalisation personnalisé dans la déclaration de capture, mais je l'ai sorti pour cet exemple.
@ABATISHCHEV: Cette déclaration est erronée - appeler juste lancer code> réserve b> la trace de la pile; créer une nouvelle exception ou faire
lancer ex; code> enfreindrait la pile d'appel; Voir: weblogs.asp.net/fmarguerie/archive/2008/01/02/...
@marc_s: Oui, tu as raison, j'avais tort (en expression sur la trace de la pile). de toute façon cela n'a aucun sens jusqu'à la journalisation, etc. comme @Lareau a dit
Pour récupérer les informations lorsque le DomainController code> existe dans un domaine dans lequel votre machine n'appartient pas, vous avez besoin de quelque chose de plus.
DirectoryContext domainContext = new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword"); var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext); var controller = domain.FindDomainController();
Je ne veux pas passer le nom d'utilisateur et le mot de passe.
Malheureusement, si vous traversez des domaines, vous devez. Votre identité existante ne sera pas reconnue autrement. Même avec le "nouveau" 3.5 system.directoryservices.accountmanagement code> Espace de noms, vous devez inclure un nom d'utilisateur / mot de passe valide sur le domaine externe i>.
Cela ne fonctionne pas car votre ordinateur local ne sera pas en mesure de trouver un CC pour ce domaine.