E-Mail-Adresse der Active Directory-Befehlszeilenabfrage für den Benutzernamen


17

Unter Windows XP in einer Active Directory-Umgebung - Was ist die einfachste Möglichkeit für mich, die E-Mail-Adresse eines Benutzers von AD abzufragen, wenn sein Benutzername in der Befehlszeile angegeben ist.

(Vorausgesetzt, ich weiß, wo es normalerweise im Baum aufbewahrt wird).

(Ich kenne den Benutzernamen / die Domäne des Netzbenutzers , möchte aber nur das Element der E-Mail-Adresse zurück.)


2
Beachten Sie, dass das Attribut "mail" möglicherweise nicht die gesuchte E-Mail-Adresse ist, wenn Sie sich in einem komplexen Exchange befinden. Sie müssen sich auch das mehrwertige Attribut "proxyAddresses" für das Benutzerobjekt ansehen.
Ryan Fisher

Antworten:


17
dsquery user -name "user name"|dsget user -samid -email -display 

So viel verpasst ... :)
TheCleaner

1
Ok - vielleicht war mir nicht klar - aber du bist nah genug dran - was ich wohl wollte war: dsquery user -samid "loginname" | dsget user -email
Hawkeye


5

so etwas wie diese dsquery könnte funktionieren.

E-Mail nach Benutzername abfragen dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | dsget user -email

Ich habe den Beitrag zuerst falsch gelesen und dachte, Sie wollten einen Benutzernamen aus dem E-Mail-Namen. Deshalb habe ich dieses hier gepostet. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (mail=user@domain.com))" -attr benutzername

Basierend auf einigen Skripten bei der Arbeit und dieser Site, die einige andere Ideen hat http://www.petri.co.il/forums/showthread.php?t=18464 über die Verwendung von csvde.exe


4

adfind -sc u: Mail "Benutzername"


Das ist ein wirklich nützliches Tool, obwohl es fantastischer wäre, wenn die Person den Quellcode zur Verfügung stellen würde.
Justin Dearing

4

Wenn es sich bei der gewünschten E-Mail auch um den Benutzerprinzipalnamen handelt, können Sie ihn mit abrufen

whoami /upn

Dies funktioniert jedoch nur, um die E-Mail des aktuellen Benutzers abzurufen, nicht, wenn die Frage ursprünglich gestellt wurde.


Verwendete diese Methode, indem cmd als Zielbenutzer ausgeführt wurde. Arbeitete wie ein Zauber
Daniel

Dies gibt auch nur den UPN zurück, der nicht unbedingt mit der öffentlichen Standard-E-Mail-Adresse des Benutzers übereinstimmt, insbesondere, wenn die AD-Domäne lokal oder ähnlich ist und keine registrierte öffentliche Domäne ist.
Craig

1
@ Craig Der erste Satz meiner Antwort besagt, dass ...
krispy

2

Installieren Sie Powershell und das QuestAD-Addon-Pack. Dann ist es so etwas wie:

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

2

Sie können einfaches VBScript schreiben, um über LDAP abzufragen. Erstellen Sie eine Datei mit der Erweiterung VBS

Lege so etwas hinein

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 

Gib den korrekten BENUTZERNAMEN in die LDAP-Abfrage ein, starte die VBS-Datei und genieße :)

Wenn Sie zum ersten Mal mit LDAP arbeiten, kann es etwas kompliziert sein, eine LDAP-Abfrage zu schreiben. Um den LDAP-Pfad für den Benutzer zu erkennen (dh was Sie nach LDAP einfügen müssen: //), können Sie Active Directory herunterladen Explorer von Microsoft Rufen Sie den Explorer auf, navigieren Sie zum Benutzer und sehen Sie, was im Textfeld Pfad angezeigt wird

In meinem Fall war es so etwas wie CN = [Benutzername], CN = Benutzer, DC = [Städtename], DC = [Firmenname], DC = com,


2

LINQ zu allem ! Zur Bequemlichkeit:

1) Fügen Sie in den Abfrageeigenschaften von LinqPad einen Verweis auf System.DirectoryServices.AccountManagement.dll hinzu. 2) Zusätzlicher Namespace-Import: System.DirectoryServices.AccountManagement

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();

2

Ich habe diesen Thread gefunden, der mir geholfen hat, das zu bekommen, was ich wollte. So erhalten Sie Attribute von AD-Benutzern in Umgebungsvariablen. Dieses Skript nimmt alle gewünschten Attribute vom angemeldeten Benutzer und legt eine entsprechende Umgebungsvariable fest. Ich habe den Variablen ein Präfix vorangestellt, aber das ist optional, sodass der Variablenname zu "AD [Attributname]" wird. Sie können Attribute auswählen. Fügen Sie Ihr Attribut einfach nach -attr hinzu oder entfernen Sie es. Nicht sehr nützlich für mehrwertige Attribute. Letzter (ein) Wert geht in die Umgebungsvariable.

Dieses Skript ist lokal für die aktuelle cmd.exe

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

Um globale Umgebungsvariablen in Windows zu erhalten, können wir "setx" in Windows 7 verwenden. (Für Loginscript vielleicht ... aber viel langsamer.)

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: Ein Leerzeichen am Ende der set-Anweisung in Beispiel 2 hat dazu geführt, dass der Wert mit einem Leerzeichen endet. Zum Korrigieren entfernt. (Set %% A = %% B & setx ...) Außerdem wurde festgestellt, dass Sie mindestens zwei Attribute exportieren müssen, damit das Skript ordnungsgemäß funktioniert.

Eine späte Antwort, aber wenn es jemandem da draußen helfen kann, bin ich glücklich.


1

Ich weiß nicht, ob es auf den Mittelwert des Threadstarters abgestimmt ist oder nicht. Aber ich finde gerade eine Lösung für mein bestehendes Problem, die bereits nach Durchsuchen dieses Themas gelöst wurde. Ermitteln der USER LOGIN ID basierend auf der BEKANNTEN MAILADRESSE . :)

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]
└─────────────────────────────────────┘

Die Datei [ salesforce-uid-mail-address.txt ] enthält eine Liste der E-Mail-Adressen. Die Datei [ salesforce-uid-cn.txt ] enthält "vollständigen CN mit Pfad". Die Datei [ salesforce-uid-samid.txt ] enthält den Alias ​​"Benutzer-Anmeldename" "SAMID gefunden". Das war's Leute. Verbesserungsvorschläge sind willkommen. :)


-1

Unten ist ein Batch-Skript, das ich für etwas anderes geschrieben habe, aber es kann verwendet werden, um das E-Mail-Attribut innerhalb eines CN ohne zu große Probleme zu finden.


:: CN Attribute Lookup Tool
::   Written by Turbo Dog
::
:: -- Purpose: A simple lookup batch script using the ldifde command.
::
:: -- It was written to translate a hashed CN with it's more human readable attribute.
::
:: -- Multi environment version
::
:: -- anything in <brackets> is something you need to fill e.g. "set servip=10.0.0.5"
::
:: -- Generic ID Version:
:: -- <ID with read access to CN and it's target attribute> will have to be made, 
:: -- careful with this as it'll need to be a generic account with a non-expiring password
:: 
::
:BEGIN
@echo off
:: - Grey background with black font -
color 70
:RESTART
cls
:: Environment choice
:: default choice (1 preproduction 2 test 3 production)
set ENVCH=3
setlocal enableextensions enabledelayedexpansion
echo  ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo  Û CN Attribute Lookup Tool V1.0 Û
echo  ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
echo. 
echo.
echo  1. PreProduction
echo  2. Test
echo  3. Production
echo.
echo  Please enter the number of the environment you wish to search and press enter or type q and press enter to quit: (3)
set /p ENVCH=
IF %ENVCH%==1 GOTO PPRODU
IF %ENVCH%==2 GOTO TESTEN
IF %ENVCH%==3 GOTO PRODUC
IF %ENVCH%==q GOTO FINISH
IF %ENVCH%==Q GOTO FINISH
IF %ENVCH%==[%1]==[] GOTO FINISH
:: PreProduction settings
:PPRODU
set envtype=PreProduction
set servip=<IP or hostname of preproduction AD server>
set servpt=<port number of preproduction AD server>
GOTO GATHER
:: Test settings
:TESTEN
set envtype=Test
set servip=<IP or hostname of test AD server>
set servpt=<port number of test AD server>
GOTO GATHER
:: Production settings
:PRODUC
set envtype=Production
set servip=<IP or hostname of production AD server>
set servpt=<port number of production AD server>
GOTO GATHER
:GATHER
:: - Gather information for job -
cls
:: - Grey background with black font -
color 70
echo  ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo  Û CN Attribute Lookup Tool V1.0 Û
echo  ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
echo  Environment - !envtype!
echo. 
echo  Copy and paste the CN and press enter (or type q and enter to quit):
set /p resource=""
IF "%resource%"=="q" GOTO FINISH
IF "%resource%"=="Q" GOTO FINISH
set resourcein=!resource!
cls
:: - Process action -
ldifde -s %servip% -t %servpt% -a <ID with read access to CN and it's target attribute> <password for ID> -d "<the container that holds the CN's to search through cn=Container,ou=DOMAIN,o=ORG>" -f output.txt -l "<target attribute to read>" -r "(cn=%resource%)"
:: pause :: only have this line active (start colons missing) during troubleshooting to see if anything is written to the output.txt file
cls
:: - Extraction of the attribute from the output file -
set resource=
for /f "delims=" %%a in (output.txt) do (
    set line=%%a
    if "x!line:~0,22!"=="<target attribute to read>: " (
        set resource="!line:~22!"
    )
)
:: - Check to see if it has worked? -
IF NOT %resource%==[%1]==[] GOTO RESULT :: Resource value has something then send to the result step otherwise default to error
:: - The error message -
:: - Black background with red font (amiga guru looking error) -
color 0C
cls
echo  ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo  Û CN Attribute Lookup Tool V1.0 Û
echo  ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
echo  Environment - !envtype!
echo.
echo  Sorry, it appears you've entered an CN that's either not for
echo  !envtype!, has not got anything in it's attribute or has been copied incorrectly!
echo.
echo  Press any key to retry.
:: - Cleanup errored output file -
del output.txt
pause >nul
GOTO GATHER
:: - The result -
:RESULT
:: - Copy result to clipboard -
echo|set/p=%resource%|clip
:: - Grey background with black font -
color 70
cls
echo  ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo  Û CN Attribute Lookup Tool V1.0 Û
echo  ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
echo  Environment - !envtype!
echo. 
echo. Your submission was: "!resourcein!"
echo  The attribute is: !resource! 
echo.
echo  !resource! has been copied to the clipboard and is ready to paste.
echo.
:: - Cleanup output file -
del output.txt
:: - default to exit -
set fn=n
echo  Do you have additional resources to look up (y for yes, n for no and c to change environment)? (n):
set /p fn=""
IF %fn%==y GOTO GATHER
IF %fn%==Y GOTO GATHER
IF %fn%==c GOTO RESTART
IF %fn%==C GOTO RESTART
:FINISH
echo.
echo  Thank you, press any key to exit.
pause >nul
:: - Set CMD Shell colours back to default -
color 07
:: - The end - 
@echo off
:EOF


Es gibt dort viel Arbeit und das Skript ist wahrscheinlich in der Umgebung nützlich, für die es geschrieben wurde, aber ich verstehe nicht, wie es die Frage besser beantwortet als die anderen viel kürzeren Antworten, bei denen keine IP-Eingaben erforderlich sind und die aktiv waren hier seit Jahren (mehr als sieben im Fall des akzeptierten). Es gibt viel neuere und unbeantwortete Fragen, die sich über einen Besuch von Ihnen freuen werden!
Law29
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.