Endereço de email de consulta do diretório ativo da linha de comando para o nome de usuário

17

No Windows XP em um ambiente do Active Directory - qual é a maneira mais fácil de consultar o endereço de e-mail de um usuário no AD, devido ao nome de usuário na linha de comando.

(Supondo que eu saiba onde é mantido normalmente na árvore).

(Eu sei sobre o nome de usuário / domínio do usuário da rede, mas só quero o elemento de endereço de e-mail de volta.)

Hawkeye
fonte
2
Observe que, se você estiver em um Exchange complexo, o atributo "mail" pode não ser o endereço de email que você está procurando. Você também precisará examinar o atributo com valores múltiplos "proxyAddresses" no objeto de usuário.
Ryan Fisher

Respostas:

17
dsquery user -name "user name"|dsget user -samid -email -display 
pQd
fonte
Perdeu muito por isso ... :)
TheCleaner
11
Ok - talvez eu não estava claro - mas você está perto o suficiente - o que eu acho que eu queria era: usuário dsquery samid "loginname" | usuário dsget -email
Hawkeye
6

dsquery nome do usuário "Nome Sobrenome" | dsget user -email

O limpador
fonte
5

algo como esse dsquery pode funcionar.

consultar email por nome de usuário dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = nome de usuário))" | dsget user -email

Eu li errado a postagem primeiro e achei que você queria um nome de usuário a partir do nome do email. É por isso que eu postei este. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) ([email protected]))))" -attr nome de usuário

com base em alguns scripts em funcionamento e neste site que tem outras idéias http://www.petri.co.il/forums/showthread.php?t=18464 sobre o uso do csvde.exe

BrianP
fonte
4

adfind -sc u: email "nome de usuário"

benPearce
fonte
Essa é uma ferramenta realmente útil, embora fosse mais impressionante se a pessoa fornecesse o código-fonte.
Justin Dearing
4

Se o email que você deseja também for o Nome principal do usuário, você poderá obtê-lo com

whoami /upn

No entanto, isso funciona apenas para receber o email do usuário atual, e não de nenhum usuário como a pergunta postulada originalmente.

Crocante
fonte
Usou esse método executando o cmd como o usuário de destino. Funcionou como um encanto
Daniel
Isso também retorna apenas o UPN, que não é necessariamente o mesmo que o endereço de email público padrão do usuário, especialmente se o domínio do AD for .local ou algo semelhante ao invés de um domínio público registrado.
Craig
11
@ Craig A primeira frase da minha resposta diz que ...
krispy
2

Instale o Powershell e o pacote de complementos do QuestAD. Então é algo como:

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

Você pode escrever VBScript simples para consultar através do LDAP Crie um arquivo com extensão VBS

Coloque algo assim

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 

Coloque o USER NAME correto na string de consulta LDAP, execute o arquivo VBS e aproveite :)

Se for a primeira vez que você trabalha com LDAP, pode ser um pouco complicado escrever consultas LDAP Para reconhecer o caminho LDAP para o usuário (ou seja, o que você precisa colocar após LDAP: //), você pode baixar o Active Directory Explorer do Microsoft Run Explorer, navegue até o usuário e veja o que ele mostra na caixa de texto Caminho

No meu caso, era algo como CN = [nome do usuário], CN = Usuários, DC = [nome da cidade], DC = [nome da empresa], DC = com,

Bogdan_Ch
fonte
2

LINQ para tudo ! Por conveniência:

1) Nas propriedades da consulta do LinqPad, adicione uma referência ao System.DirectoryServices.AccountManagement.dll. 2) Importação de espaço para nome adicional: System.DirectoryServices.AccountManagement

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();
O que seria legal
fonte
2

Encontrei este tópico que me ajudou a conseguir o que queria. Para obter qualquer atributo de usuário do AD em variáveis ​​de ambiente. Esse script utiliza todos os atributos desejados do usuário conectado e define uma variável de ambiente correspondente. Prefixei as variáveis, mas isso é opcional, para que o nome da variável se torne "AD [nome do atributo]". Atributos é a sua escolha, basta adicionar ou remover seu atributo após -attr. Porém, não é muito útil para atributos de valores múltiplos. O último (um) valor entra na variável de ambiente.

Este script é local para o cmd.exe atual

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 obter variáveis ​​de ambiente globais no Windows, podemos usar "setx" no Windows 7. (Para o loginscript talvez ... mas muito mais 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: um caractere de espaço no final da instrução set no exemplo 2 fez com que o valor terminasse com espaço vazio. Removido para corrigir. (Defina %% A = %% B & setx ...) Também descobriu que você deve exportar pelo menos dois atributos para que o script funcione corretamente.

Uma resposta tardia, mas se puder ajudar alguém lá fora, estou feliz.

Jörgen na Suécia
fonte
1

Eu não sei se é compatível com o iniciador de tópicos ou não. Mas acabei de encontrar uma solução do meu problema existente que já foi resolvida depois de navegar neste tópico. Localizando ID de login do usuário com base no endereço de e-mail conhecido . :)

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

O arquivo [ salesforce-uid-mail-address.txt ] contém uma lista de endereços de email. O arquivo [ salesforce-uid-cn.txt ] contém "CN completo com o caminho". E o arquivo [ salesforce-uid-samid.txt ] contém "SAMID encontrado" alias "nome de login do usuário". Isso é tudo, pessoal. Todas as idéias para melhoria são bem-vindas. :)

Rhak Kahr
fonte
-1

Abaixo está um script em lote que escrevi para outra coisa, mas ele pode ser usado para encontrar o atributo de email em uma CN sem muito problema.


:: 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
fonte
Há muito trabalho lá e o script é provavelmente útil no ambiente para o qual foi escrito, mas não vejo como ele responde melhor à pergunta do que as outras respostas muito mais curtas que não precisam de entrada de IPs e que foram ativadas aqui por anos (mais de sete no caso do aceito). Há perguntas muito mais recentes e sem resposta que agradecerão sua visita!
Law29