Dirección de correo electrónico de consulta de directorio activo de línea de comando para nombre de usuario

18

En Windows XP en un entorno de Active Directory: ¿cuál es la forma más fácil para mí de consultar la dirección de correo electrónico de un usuario desde AD dado su nombre de usuario en la línea de comandos?

(Suponiendo que sé dónde se guarda normalmente en el árbol).

(Que sé de usuario de la red LoginName / dominio pero sólo quiero la dirección hacia atrás elemento de correo electrónico).

Hawkeye
fuente
3
Tenga en cuenta que si se encuentra en un intercambio complejo, el atributo "mail" puede no ser la dirección de correo electrónico que está buscando. También deberá mirar el atributo de varios valores "proxyAddresses" en el objeto de usuario.
Ryan Fisher

Respuestas:

17
dsquery user -name "user name"|dsget user -samid -email -display 
pQd
fuente
Lo perdí tanto ... :)
TheCleaner
1
Ok, quizás no estaba claro, pero estás lo suficientemente cerca, lo que supongo que quería era: dsquery user -samid "loginname" | dsget user -email
Hawkeye
6

dsquery user -name "Nombre Apellido" | dsget user -email

El limpiador
fuente
5

algo como esto dsquery podría funcionar.

consulta por correo electrónico por nombre de usuario dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | dsget user -email

Primero leí mal la publicación y pensé que querías el nombre de usuario del nombre del correo electrónico. Por eso publiqué este. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) ([email protected])))" -attr username

basado en algunos scripts en el trabajo y este sitio que tiene algunas otras ideas http://www.petri.co.il/forums/showthread.php?t=18464 sobre el uso de csvde.exe

BrianP
fuente
4

adfind -sc u: correo de "nombre de usuario"

benPearce
fuente
Esa es una herramienta útil real, aunque sería más sorprendente si la persona proporcionara el código fuente.
Justin Dearing
4

Si el correo electrónico que desea es también el Nombre principal del usuario, puede obtenerlo con

whoami /upn

Sin embargo, esto solo funciona para obtener el correo electrónico del usuario actual, no de cualquier usuario como la pregunta originalmente postulada.

krispy
fuente
Utiliza este método ejecutando cmd como usuario objetivo. Trabajó como un encanto
Daniel
1
Esto también solo devuelve el UPN, que no es necesariamente la misma que la dirección de correo electrónico pública predeterminada del usuario, especialmente si el dominio AD es .local o algo similar en lugar de un dominio público registrado.
Craig
1
@Craig La primera oración de mi respuesta dice que ...
krispy
2

Instale Powershell y el paquete de complementos QuestAD. Entonces es algo como:

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

Puede escribir VBScript simple para consultar a través de LDAP Crear un archivo con extensión VBS

Poner dentro de algo como esto

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 

Ponga el NOMBRE DE USUARIO correcto en la cadena de consulta LDAP, ejecute el archivo VBS y disfrute :)

Si es la primera vez que trabaja con LDAP, podría ser un poco complicado escribir una consulta LDAP Para reconocer la ruta LDAP para el usuario (es decir, lo que necesita poner después de LDAP: //) puede descargar Active Directory Explorador del Explorador de Microsoft Run, navegue hasta el usuario y vea lo que muestra en el cuadro de texto Ruta

En mi caso, era algo así como CN = [nombre de usuario], CN = Usuarios, DC = [nombre_de_la ciudad], DC = [nombre_de_empresa], DC = com,

Bogdan_Ch
fuente
2

LINQ a todo ! Por conveniencia:

1) En las propiedades de consulta de LinqPad, agregue una referencia a System.DirectoryServices.AccountManagement.dll. 2) Importación de espacio de nombres adicional: System.DirectoryServices.AccountManagement

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();
Lo que sería genial
fuente
2

Encontré este hilo que me ayudó a conseguir lo que quería. Para obtener los atributos de los usuarios de AD en variables de entorno. Este script toma todos los atributos deseados del usuario conectado y establece una variable de entorno correspondiente. Prefije las variables pero eso es opcional, por lo que el nombre de la variable se convierte en "AD [nombre del atributo]". Los atributos son de su elección, simplemente agregue o elimine su atributo después de -attr. Sin embargo, no es muy útil para atributos de valores múltiples. El último (un) valor entra en la variable de entorno.

Este script es local al cmd.exe actual

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

Para obtener variables de entorno global en Windows podemos usar "setx" en Windows 7. (Para loginscript quizás ... pero mucho más 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

: EDITAR: un carácter de espacio al final de la instrucción set en el ejemplo 2 hizo que el valor terminara con un espacio vacío. Lo eliminó para corregir. (Establezca %% A = %% B & setx ...) También descubrió que debe exportar al menos dos atributos para que el script funcione correctamente.

Una respuesta tardía, pero si puede ayudar a alguien, estoy feliz.

Jörgen en Suecia
fuente
1

No sé si coincide o no con el iniciador de hilo. Pero acabo de encontrar una solución a mi problema existente que ya se resolvió después de examinar este hilo. Encontrar la ID DE INICIO DE SESIÓN DEL USUARIO basada en la DIRECCIÓN DE CORREO CONOCIDA . :)

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

El archivo [ salesforce-uid-mail-address.txt ] contiene una lista de direcciones de correo electrónico. El archivo [ salesforce-uid-cn.txt ] contiene "CN completo con ruta". Y el archivo [ salesforce-uid-samid.txt ] contiene "alias SAMID" alias "nombre de usuario". Eso es todo amigos. Cualquier idea de mejora es bienvenida. :)

Rhak Kahr
fuente
-1

A continuación se muestra un script por lotes que escribí para otra cosa, pero se puede usar para encontrar el atributo de correo electrónico dentro de un CN sin demasiados problemas.


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

Perro turbo
fuente
Hay mucho trabajo allí y el script probablemente sea útil en el entorno para el que fue escrito, pero no veo cómo responde mejor a la pregunta que las otras respuestas mucho más cortas que no necesitan entrada de IP y que han estado funcionando aquí por años (más de siete en el caso del aceptado). ¡Hay muchas preguntas más recientes y sin respuesta que agradecerán su visita!
Ley29