Adres e-mail zapytania aktywnego katalogu w wierszu polecenia dla nazwy użytkownika

18

W systemie Windows XP w środowisku Active Directory - co jest najłatwiejszym sposobem, aby zapytać o adres e-mail użytkownika z AD, podając jego nazwę użytkownika w wierszu poleceń.

(Zakładając, że wiem, gdzie zwykle jest przechowywany w drzewie).

(Wiem o nazwie użytkownika / domenie użytkownika sieciowego, ale chcę tylko zwrócić element adresu e-mail).

Sokole Oko
źródło
3
Pamiętaj, że jeśli korzystasz ze złożonej wymiany, atrybut „mail” może nie być adresem e-mail, którego szukasz. Będziesz także musiał spojrzeć na wielowartościowy atrybut „proxyAddresses” na obiekcie użytkownika.
Ryan Fisher

Odpowiedzi:

17
dsquery user -name "user name"|dsget user -samid -email -display 
pQd
źródło
Ominęło mnie
1
Ok - może nie byłem jasny - ale jesteś wystarczająco blisko - to, co chyba chciałem, to: dsquery user -samid "loginname" | dsget user -email
Hawkeye
6

dsquery nazwa-użytkownika „Imię Nazwisko” | dsget użytkownik -email

TheCleaner
źródło
5

coś takiego jak ten dsquery może działać.

zapytanie e-mail według nazwy użytkownika dsquery.exe * -filter "(& (objectClass = użytkownik) (! (objectClass = komputer) (sAMAccountName = nazwa użytkownika))" | dsget użytkownik -email

Najpierw źle przeczytałem ten post i pomyślałem, że chcesz nazwę użytkownika z nazwy e-mail. Właśnie dlatego opublikowałem ten. dsquery.exe * -filter "(& (objectClass = użytkownik) (! (objectClass = komputer) ([email protected]))) -attr nazwa użytkownika

w oparciu o niektóre skrypty w pracy i tę stronę, która ma inne pomysły http://www.petri.co.il/forums/showthread.php?t=18464 na temat korzystania z csvde.exe

BrianP
źródło
4

adfind -sc u: mail „nazwa użytkownika”

benPearce
źródło
To naprawdę przydatne narzędzie, chociaż byłoby bardziej niesamowite, gdyby osoba podała kod źródłowy.
Justin Dearing
4

Jeśli adres e-mail, którego chcesz, to także główna nazwa użytkownika, możesz go otrzymać

whoami /upn

Działa to jednak tylko w celu otrzymania adresu e-mail bieżącego użytkownika, a nie dowolnego użytkownika, jak pierwotnie postulowano pytanie.

krispy
źródło
Zastosowano tę metodę, uruchamiając cmd jako użytkownik docelowy. Działa jak urok
Daniel
1
Zwraca to również tylko nazwę UPN, która niekoniecznie jest taka sama jak domyślny publiczny adres e-mail użytkownika, szczególnie jeśli domeną AD jest .local lub coś podobnego, a nie zarejestrowana domena publiczna.
Craig
1
@Craig Pierwsze zdanie mojej odpowiedzi mówi, że ...
krispy
2

Zainstaluj Powershell i pakiet dodatków QuestAD. To jest coś w stylu:

connect-qadservice
(get-qaduser 'bobsusername').emailAddress
Neobajt
źródło
2

Możesz pisać prosty VBScript do zapytań poprzez LDAP. Utwórz plik z rozszerzeniem VBS

Umieść w środku coś takiego

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 

Wpisz poprawną NAZWĘ UŻYTKOWNIKA do ciągu zapytania LDAP, uruchom plik VBS i ciesz się :)

Jeśli pracujesz z LDAP po raz pierwszy, napisanie zapytania LDAP może być nieco skomplikowane. Aby rozpoznać ścieżkę LDAP do użytkownika (tzn. To, co musisz umieścić po LDAP: //), możesz pobrać Active Directory Eksplorator od Microsoft Uruchom eksploratora, przejdź do użytkownika i zobacz, co pokazuje w polu tekstowym Ścieżka

W moim przypadku było to coś w rodzaju CN = [nazwa użytkownika], CN = Użytkownicy, DC = [nazwa miasta], DC = [nazwa firmy], DC = com,

Bogdan_Ch
źródło
2

LINQ do wszystkiego ! Dla wygody:

1) We właściwościach zapytania LinqPad dodaj odwołanie do System.DirectoryServices.AccountManagement.dll. 2) Dodatkowy import przestrzeni nazw: System.DirectoryServices.AccountManagement

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();
Co by było fajne
źródło
2

Znalazłem ten wątek, który pomógł mi zdobyć to, czego chciałem. Aby uzyskać atrybuty użytkowników AD w zmienne środowiskowe. Ten skrypt pobiera wszystkie wymagane atrybuty od zalogowanego użytkownika i ustawia odpowiednią zmienną środowiskową. Prefiksowałem zmienne, ale jest to opcjonalne, więc nazwa zmiennej staje się „AD [nazwa atrybutu]”. Atrybuty są do wyboru, wystarczy dodać lub usunąć atrybut po -attr. Jednak niezbyt przydatne w przypadku atrybutów wielowartościowych. Ostatnia (jedna) wartość trafia do zmiennej środowiskowej.

Ten skrypt jest lokalny w stosunku do bieżącego 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

Aby uzyskać globalne zmienne środowiskowe w systemie Windows, możemy użyć „setx” w systemie Windows 7. (Być może dla loginu ... ale znacznie wolniej.)

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

: EDYCJA: znak spacji na końcu instrukcji set w przykładzie 2 spowodował, że wartość kończy się pustą spacją. Usunąłem to, aby poprawić. (Zestaw %% A = %% B & setx ...) Odkryłem również, że musisz wyeksportować co najmniej dwa atrybuty, aby skrypt działał poprawnie.

Późna reakcja, ale jeśli może pomóc komukolwiek tam, jestem szczęśliwy.

Jörgen w Szwecji
źródło
1

Nie wiem, czy to pasuje do tego, co oznacza starter wątku, czy nie. Ale właśnie znalazłem rozwiązanie mojego istniejącego problemu, które zostało już rozwiązane po przejrzeniu tego wątku. Znalezienie ID LOGOWANIA UŻYTKOWNIKA w oparciu o ZNANY ADRES POCZTY . :)

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

Plik [ salesforce-uid-mail-address.txt ] zawiera listę adresów e-mail. Plik [ salesforce-uid-cn.txt ] zawiera „pełny kod CN ze ścieżką”. Plik [ salesforce-uid-samid.txt ] zawiera „znaleziony SAMID” alias „nazwa logowania użytkownika”. To wszystko ludzie. Wszelkie pomysły na ulepszenia są mile widziane. :)

Rhak Kahr
źródło
-1

Poniżej znajduje się skrypt wsadowy, który napisałem dla czegoś innego, ale można go użyć do znalezienia atrybutu e-mail w CN bez większego problemu.


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

Turbo Dog
źródło
Jest tam dużo pracy i skrypt jest prawdopodobnie przydatny w środowisku, dla którego został napisany, ale nie widzę, w jaki sposób lepiej odpowiada na pytanie niż inne, znacznie krótsze odpowiedzi, które nie wymagają wprowadzania adresów IP i które były gotowe tutaj od lat (ponad siedem w przypadku przyjętego). Jest wiele nowszych pytań bez odpowiedzi, które docenią Twoją wizytę!
Law29