web-dev-qa-db-fra.com

Adresse e-mail de requête de la ligne de commande Active Directory pour le nom d'utilisateur

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.)

19
Hawkeye
dsquery user -name "user name"|dsget user -samid -email -display 
18
pQd

dsquery user -name "Prénom Nom" | dsget user -email

7
TheCleaner

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.

6
krispy

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

5
BrianP

adfind -sc u: mail "nom d'utilisateur"

4
benPearce

Installez Powershell et le module complémentaire QuestAD. Ensuite, c'est quelque chose comme:

connect-qadservice
(get-qaduser 'bobsusername').emailAddress
2
Neobyte

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.

2
Jörgen in Sweden

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,

2
Bogdan_Ch

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();
2
What Would Be Cool

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. :)

1
Rhak Kahr