В Windows XP в среде Active Directory - какой для меня самый простой способ запросить адрес электронной почты пользователя из AD, учитывая его имя пользователя в командной строке.
(Предполагая, что я знаю, где он обычно хранится в дереве).
(Я знаю о пользователе сети логин / domain, но я просто хочу вернуть элемент адреса электронной почты.)
dsquery user -name "user name"|dsget user -samid -email -display
dsquery user -name "Имя Фамилия" | dsget user -email
Если желаемое электронное письмо также является основным именем пользователя, вы можете получить его с помощью
whoami /upn
Однако это работает только для получения электронной почты текущего пользователя, а не любого пользователя, как изначально задан вопрос.
что-то вроде этого dsquery может работать.
запросить электронную почту по имени пользователя dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | dsget user -email
Сначала я неправильно прочитал сообщение и подумал, что вам нужно имя пользователя из имени электронной почты. Вот почему я разместил это. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (mail=user@domain.com)))" -attr имя пользователя
на основе некоторых скриптов в работе и этого сайта, на котором есть другие идеи http://www.petri.co.il/forums/showthread.php?t=18464 об использовании csvde.exe
adfind -sc u: "имя пользователя" почта
Установите Powershell и дополнительный пакет QuestAD. Тогда это будет примерно так:
connect-qadservice
(get-qaduser 'bobsusername').emailAddress
Вы можете написать простой VBScript для запроса через LDAP. Создайте файл с расширением VBS.
Поместите внутрь что-то вроде этого
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
Введите правильное ИМЯ ПОЛЬЗОВАТЕЛЯ в строку запроса LDAP, запустите файл VBS и наслаждайтесь :)
Если вы впервые работаете с LDAP, написать запрос LDAP может быть немного сложно.Чтобы распознать путь LDAP к пользователю (т.е. то, что вам нужно поставить после LDAP: //), вы можете загрузить Обозреватель Active Directory в проводнике Microsoft Run перейдите к пользователю и посмотрите, что он показывает в текстовом поле Путь
В моем случае это было что-то вроде CN = [имя пользователя], CN = Users, DC = [city_name], DC = [company_name], DC = com,
1) В свойствах запроса LinqPad добавьте ссылку на System.DirectoryServices.AccountManagement.dll. 2) Импорт дополнительного пространства имен: System.DirectoryServices.AccountManagement
using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
usr.Dump();
Нашел эту ветку, которая помогла мне получить то, что я хотел. Чтобы добавить любые атрибуты пользователей AD в переменные среды. Этот сценарий берет все требуемые атрибуты от вошедшего в систему пользователя и устанавливает соответствующую переменную среды. Я добавил к переменным префикс, но это необязательно, поэтому имя переменной становится «AD [имя атрибута]». Атрибуты - на ваш выбор, просто добавьте или удалите свой атрибут после -attr. Однако не очень полезно для многозначных атрибутов. Последнее (одно) значение попадает в переменную окружения.
Этот сценарий является локальным для текущего 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
Чтобы получить глобальные переменные среды в Windows, мы можем использовать "setx" в Windows 7. (Возможно, для loginscript ... но намного медленнее.)
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: пробел в конце оператора set в примере 2 привел к тому, что значение заканчивалось пустым пространством. Убрал, чтобы исправить. (Set %% A = %% B & setx ...) Также выяснилось, что вы должны экспортировать как минимум два атрибута для правильной работы скрипта.
Поздний ответ, но если он может кому-то помочь, я счастлив.
Я не знаю, соответствует ли он средству запуска нити или нет. Но я просто нахожу решение моей существующей проблемы, которая уже была решена после просмотра этой темы. Нахождение ИДЕНТИФИКАТОРА ЛОГИНА ПОЛЬЗОВАТЕЛЯ на основе ИЗВЕСТНОГО ПОЧТОВОГО АДРЕСА. :)
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]
└─────────────────────────────────────┘
Файл [salesforce-uid-mail-address.txt] содержит список адресов электронной почты. Файл [salesforce-uid-cn.txt] содержит «полный CN с путем». И файл [salesforce-uid-samid.txt] содержит псевдоним «найдено SAMID» «имя пользователя». Это все, ребята. Любые идеи по улучшению приветствуются. :)
Ниже приведен пакетный сценарий, который я написал для чего-то еще, но его можно использовать для поиска атрибута электронной почты в CN без особых проблем.
:: 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