dsquery user -name "user name"|dsget user -samid -email -display
No Windows XP em um ambiente de Active Directory - qual é a maneira mais fácil de consultar o endereço de e-mail de um usuário a partir do AD, com seu nome de usuário na linha de comando.
(Supondo que eu saiba onde é mantido normalmente na árvore).
(Eu sei sobre net user loginname / domain, mas eu só quero o elemento de endereço de e-mail de volta.)
dsquery user -name "Nome Sobrenome" | dsget user -email
algo como esse dsquery pode funcionar.
e-mail de consulta por nome de usuário dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computador) (sAMAccountName = nome de usuário)))" | dsget user -email
Eu interpretei mal a postagem primeiro e achei que você queria o nome de usuário do nome do e-mail. É por isso que eu postei este aqui. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computador) ([email protected])))" -attr username
com base em alguns scripts no trabalho e neste site que tem algumas outras ligação sobre como usar o csvde.exe
adfind -sc u: correio "username"
Se o email que você deseja também for o nome do usuário principal, você pode obtê-lo com
whoami /upn
No entanto, isso só funciona para obter o email do usuário atual, não de qualquer usuário, como a pergunta originalmente postulada.
Instale o Powershell e o addon pack do QuestAD. Então é algo como:
connect-qadservice
(get-qaduser 'bobsusername').emailAddress
Você pode escrever um VBScript simples para consultar o LDAP Crie um arquivo com a extensão VBS
Coloque dentro de 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 NOME DE USUÁRIO correto na string de consulta LDAP, execute o arquivo VBS e aproveite:)
Se é a primeira vez que você trabalha com o LDAP, pode ser um pouco complicado escrever uma consulta LDAP Para reconhecer o caminho LDAP para o usuário (ou seja, o que você precisa colocar após o LDAP: //), você pode fazer o download de Active Directory Explorer da Microsoft Execute o explorador, navegue até o usuário e veja o que ele mostra na caixa de texto Caminho
No meu caso, foi algo como CN = [nome de usuário], CN = Usuários, DC = [nome da cidade], DC = [nome da empresa], DC = com,
LINQ para tudo ! Por conveniência:
1) Nas propriedades de consulta do LinqPad, adicione uma referência ao System.DirectoryServices.AccountManagement.dll. 2) Importação Adicional de Namespace: System.DirectoryServices.AccountManagement
using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
usr.Dump();
Encontrei este tópico que me ajudou a conseguir o que eu queria. Para obter quaisquer atributos de usuários do AD em variáveis de ambiente. Este script pega todos os atributos desejados do usuário logado e define uma variável de ambiente correspondente. Prefixei as variáveis, mas isso é opcional, portanto, o nome da variável se torna "AD [nome do atributo]". Atributos são de sua escolha, basta adicionar ou remover seu atributo após -attr. Não é muito útil para atributos de múltiplos valores. O último valor (um) vai para a 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 o "setx" no windows 7. (Para 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. (Definir %% A = %% B & setx ...) Também descobri que você deve exportar pelo menos dois atributos para o script funcionar corretamente.
Uma resposta tardia, mas se puder ajudar alguém lá fora, sou feliz.
Eu não sei se é compatível com o ponto inicial da conversa ou não. Mas acabei de encontrar uma solução do meu problema existente que já foi resolvido depois de navegar neste segmento. Encontrando o ID do LOGIN DE USUÁRIO baseado no MAK ADDRESS . :)
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 e-mail. O arquivo [ salesforce-uid-cn.txt ] contém "CN completo com caminho". E o arquivo [ salesforce-uid-samid.txt ] contém o alias "encontrado SAMID" "nome de login do usuário". Isso é tudo pessoal. Qualquer idéia de melhoria é bem-vinda. :)
Abaixo está um script em lote que eu escrevi para outra coisa, mas ele pode ser usado para encontrar o atributo de e-mail dentro de um 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