Indirizzo di posta elettronica della query della directory attiva della riga di comando per nome utente


18

Su Windows XP in un ambiente Active Directory: qual è il modo più semplice per me di interrogare l'indirizzo e-mail di un utente da AD, dato il suo nome utente sulla riga di comando.

(Supponendo che io sappia dove è tenuto normalmente nell'albero).

(Conosco il nome utente / dominio net user ma voglio solo indietro l'elemento dell'indirizzo email.)


3
Se ti trovi in ​​uno scambio complesso, l'attributo "mail" potrebbe non essere l'indirizzo email che stai cercando. Sarà inoltre necessario esaminare l'attributo multivalore "proxyAddresses" sull'oggetto utente.
Ryan Fisher,

Risposte:


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

Ci è
mancato

1
Ok - forse non ero chiaro - ma tu sei abbastanza vicino - quello che immagino di volere era: dsquery user -samid "loginname" | dsget user -email
Hawkeye


5

qualcosa del genere potrebbe funzionare.

query email per nome utente dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | dsget user -email

Prima ho letto male il post e ho pensato che volessi il nome utente dal nome e-mail. Ecco perché ho pubblicato questo. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (mail=user@domain.com)))" -attr username

basato su alcuni script al lavoro e su questo sito che ha alcune altre idee http://www.petri.co.il/forums/showthread.php?t=18464 sull'uso di csvde.exe


4

adfind -sc u: mail "nome utente"


Questo è uno strumento davvero utile, anche se sarebbe più fantastico se la persona fornisse il codice sorgente.
Justin Dearing

4

Se l'e-mail che desideri è anche il nome principale utente, puoi ottenerlo con

whoami /upn

Tuttavia, questo funziona solo per ottenere l'e-mail dell'utente corrente, non di qualsiasi utente come la domanda originariamente formulata.


Utilizzato questo metodo eseguendo cmd come utente di destinazione. Ha funzionato come per incanto
Daniel,

1
Ciò restituisce anche solo l'UPN, che non è necessariamente uguale all'indirizzo di posta elettronica pubblico predefinito dell'utente, specialmente se il dominio AD è .local o qualcosa di simile piuttosto che un dominio pubblico registrato.
Craig,

1
@Craig La prima frase della mia risposta dice che ...
Krispy,

2

Installa Powershell e il pacchetto aggiuntivo QuestAD. Quindi è qualcosa del tipo:

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

2

È possibile scrivere VBScript semplice per eseguire query tramite LDAP Creare un file con estensione VBS

Metti dentro qualcosa del genere

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 

Inserisci il NOME UTENTE corretto nella stringa di query LDAP, esegui il file VBS e divertiti :)

Se è la prima volta che lavori con LDAP, potrebbe essere un po 'complicato scrivere una query LDAP Per riconoscere il percorso LDAP per l'utente (ovvero cosa devi inserire dopo LDAP: //) puoi scaricare Active Directory Explorer da Microsoft Run Explorer, vai all'utente e vedi cosa mostra nella casella di testo Percorso

Nel mio caso era qualcosa come CN = [nome utente], CN = Users, DC = [nome_città], DC = [nome_azienda], DC = com,


2

LINQ a tutto ! Per comodità:

1) Nelle proprietà della query di LinqPad, aggiungere un riferimento a System.DirectoryServices.AccountManagement.dll. 2) Importazione di spazio dei nomi aggiuntivo: System.DirectoryServices.AccountManagement

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

2

Ho trovato questa discussione che mi ha aiutato a ottenere quello che volevo. Per ottenere eventuali attributi degli utenti AD nelle variabili di ambiente. Questo script prende tutti gli attributi desiderati dall'utente che ha effettuato l'accesso e imposta una variabile di ambiente corrispondente. Ho anteposto le variabili ma è facoltativo, quindi il nome della variabile diventa "AD [nome attributo]". Gli attributi sono di tua scelta, basta aggiungere o rimuovere l'attributo dopo -attr. Non molto utile per gli attributi multivalore. L'ultimo (uno) valore va nella variabile d'ambiente.

Questo script è locale al cmd.exe corrente

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

Per ottenere variabili d'ambiente globali in Windows possiamo usare "setx" in Windows 7. (Forse per il loginscript ... ma molto più lento.)

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 carattere spazio alla fine dell'istruzione set nell'esempio 2 ha causato la fine del valore con spazio vuoto. Rimosso per correggere. (Imposta %% A = %% B & setx ...) Inoltre ho scoperto che è necessario esportare almeno due attributi affinché lo script funzioni correttamente.

Una risposta tardiva, ma se può aiutare qualcuno là fuori sono felice.


1

Non so se è abbinato alla media di avvio del thread o no. Ma trovo solo una soluzione al mio problema esistente che era già stata risolta dopo aver consultato questa discussione. Individuazione dell'ID LOGIN UTENTE basato su INDIRIZZO DI POSTA ELETTRICA CONOSCIUTO . :)

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

Il file [ salesforce-uid-mail-address.txt ] contiene un elenco di indirizzi e-mail. Il file [ salesforce-uid-cn.txt ] contiene "CN completo con percorso". E il file [ salesforce-uid-samid.txt ] contiene "alias SAMID" "nome di accesso utente" trovato. È tutto gente. Qualsiasi idea di miglioramento è benvenuta. :)


-1

Di seguito è riportato uno script batch che ho scritto per qualcos'altro ma può essere utilizzato per trovare l'attributo di posta elettronica all'interno di una CN senza troppi problemi.


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


C'è molto lavoro lì e lo script è probabilmente utile nell'ambiente per cui è stato scritto, ma non riesco a vedere come risponda meglio alla domanda rispetto alle altre risposte molto più brevi che non richiedono input di IP e che sono state attivate qui da anni (più di sette nel caso di quello accettato). Ci sono molte domande più recenti e senza risposta che apprezzeranno una tua visita!
Legge 29
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.