Sous Windows XP dans un environnement Active Directory - quel est le moyen le plus simple pour moi d'interroger l'adresse e-mail d'un utilisateur depuis AD en fonction de son nom d'utilisateur sur la ligne de commande.
(En supposant que je sais où il est conservé normalement dans l'arbre).
(Je connais Net User identifiant / domain mais je veux juste que l'élément d'adresse e-mail soit de retour.)
dsquery user -name "user name"|dsget user -samid -email -display
dsquery user -name "Prénom Nom" | dsget user -email
Si l'e-mail que vous souhaitez est également le nom d'utilisateur principal, vous pouvez l'obtenir avec
whoami /upn
Cependant, cela ne fonctionne que pour obtenir l'e-mail de l'utilisateur actuel, pas n'importe quel utilisateur comme la question initialement posée.
quelque chose comme ce dsquery pourrait fonctionner.
requête e-mail par nom d'utilisateur dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | dsget user -email
J'ai mal lu le message en premier et j'ai pensé que vous vouliez un nom d'utilisateur à partir du nom de l'e-mail. C'est pourquoi j'ai posté celui-ci. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) ([email protected])))" -attr username
basé sur quelques scripts au travail et ce site qui a d'autres idées http://www.petri.co.il/forums/showthread.php?t=18464 sur l'utilisation de csvde.exe
adfind -sc u: mail "nom d'utilisateur"
Installez Powershell et le module complémentaire QuestAD. Ensuite, c'est quelque chose comme:
connect-qadservice
(get-qaduser 'bobsusername').emailAddress
J'ai trouvé ce fil qui m'a aidé à obtenir ce que je voulais. Pour obtenir des attributs d'utilisateurs AD dans des variables d'environnement. Ce script prend tous les attributs souhaités de l'utilisateur connecté et définit une variable d'environnement correspondante. J'ai préfixé les variables mais c'est facultatif, donc le nom de variable devient "AD [nom d'attribut]". Les attributs sont de votre choix, il suffit d'ajouter ou de supprimer votre attribut après -attr. Pas très utile pour les attributs à valeurs multiples. La dernière (une) valeur va dans la variable d'environnement.
Ce script est local à cmd.exe actuel
for /F "tokens=1,* delims=: " %%A in ('dsquery * domainroot -l -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=%USERNAME%))" -attr adminDescription employeetype company department physicalDeliveryOfficeName street title mail') do set AD%%A=%%B
Pour obtenir des variables d'environnement globales dans Windows, nous pouvons utiliser "setx" dans Windows 7. (Pour loginscript peut-être ... mais beaucoup plus lentement.)
for /F "tokens=1,* delims=: " %%A in ('dsquery * domainroot -l -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=%USERNAME%))" -attr adminDescription employeetype company department physicalDeliveryOfficeName street title mail') do set AD%%A=%%B& setx AD%%A "%%~B" > NUL
: EDIT: un caractère espace à la fin de l'instruction set dans l'exemple 2 a provoqué la fin de la valeur avec un espace vide. Supprimé pour corriger. (Définir %% A = %% B & setx ...) A également découvert que vous devez exporter au moins deux attributs pour que le script fonctionne correctement.
Une réponse tardive, mais si cela peut aider quelqu'un, je suis heureux.
Vous pouvez écrire un VBScript simple pour interroger via LDAP Créer un fichier avec l'extension VBS
Mettez quelque chose comme ça
On Error Resume Next
Set objUser = GetObject _
("LDAP://CN=USER NAME,DC=DOMAIN_NAME,DC=com")
objUser.GetInfo
strMail = objUser.Get("mail")
WScript.echo "mail: " & strMail
Mettez le NOM D'UTILISATEUR correct dans la chaîne de requête LDAP, exécutez le fichier VBS et profitez :)
Si c'est la première fois que vous travaillez avec LDAP, il pourrait être un peu compliqué d'écrire une requête LDAP Afin de reconnaître le chemin LDAP vers l'utilisateur (c'est-à-dire ce que vous devez mettre après LDAP: //), vous pouvez télécharger - Active Directory Explorer à partir de Microsoft Run Explorer, accédez à l'utilisateur et voyez ce qu'il affiche dans la zone de texte Chemin
Dans mon cas, c'était quelque chose comme CN = [nom d'utilisateur], CN = Users, DC = [city_name], DC = [company_name], DC = com,
LINQ à tout ! Pour plus de commodité:
1) Dans les propriétés de requête de LinqPad, ajoutez une référence à System.DirectoryServices.AccountManagement.dll. 2) Importation d'espace de noms supplémentaire: System.DirectoryServices.AccountManagement
using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
usr.Dump();
Je ne sais pas si cela correspond à la moyenne du démarreur de fil ou non. Mais je viens de trouver une solution à mon problème existant qui a déjà été résolu après avoir parcouru ce fil. Recherche de l'ID DE CONNEXION DE L'UTILISATEUR en fonction de l'adresse de messagerie connue. :)
C:\Users\MrCMD>for /f "delims=" %u in ('type salesforce-uid-mail-address.txt') do @dsquery.exe * -filter "(&(objectClass=user)(!(objectClass=computer)(mail=%u)))">>"salesforce-uid-cn.txt"
┌─────────────────────────────────────┐
│ Executed Wed 07/10/2013 8:29:55.05 │ As [MrCMD]
└─────────────────────────────────────┘
C:\Users\MrCMD>for /f "delims=" %u in ('type salesforce-uid-cn.txt') do @dsget.exe user %u -samid -l|find "samid" /i>>"salesforce-uid-samid.txt"
┌─────────────────────────────────────┐
│ Executed Wed 07/10/2013 8:31:56.40 │ As [MrCMD]
└─────────────────────────────────────┘
Le fichier [salesforce-uid-mail-address.txt] contient la liste des adresses e-mail. Le fichier [salesforce-uid-cn.txt] contient "CN complet avec chemin". Et le fichier [salesforce-uid-samid.txt] contient "alias SAMID" "nom de connexion utilisateur". C'est tout le monde. Toutes les idées d'amélioration sont les bienvenues. :)