Електронна адреса запиту активного каталогу командного рядка для імені користувача


18

У Windows XP в середовищі Active Directory - найпростіший спосіб для запиту електронної адреси користувача від AD з урахуванням їх імені користувача в командному рядку.

(Припускаючи, що я знаю, де він нормально зберігається на дереві).

(Я знаю про чисте ім’я користувача / домен, але я просто хочу повернути елемент електронної адреси.)


3
Зауважте, що якщо ви перебуваєте в складній біржі, атрибут "пошта" може бути не адресою електронної пошти, яку шукаєте. Вам також потрібно буде переглянути багатозначний атрибут "proxyAddresses" на об’єкті користувача.
Райан Фішер

Відповіді:


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


1
Гаразд - можливо, мені було не зрозуміло - але ви досить близькі - те, що я, напевно, хотів, це: dsquery user -samid "логін" | dsget user -email
Hawkeye


5

щось подібне може працювати.

запит електронної пошти за ім'ям користувача dsquery.exe * -filter "(& (objectClass = користувач) (! (objectClass = комп'ютер) (sAMAccountName = ім'я користувача)))" | dsget user -mail

Спочатку я неправильно прочитав публікацію і подумав, що ви хочете ім’я користувача від імені електронної пошти. Тому я опублікував цей. dsquery.exe * -filter "(& (objectClass = користувач) (! (objectClass = комп'ютер) (mail=user@domain.com)))" -atr ім'я користувача

на основі деяких сценаріїв на роботі та цього веб-сайту, який має інші ідеї http://www.petri.co.il/forums/showthread.php?t=18464 щодо використання csvde.exe


4

adfind -sc u: "ім'я користувача"


Це реально корисний інструмент, хоча було б приголомшливішим, якби людина поставила вихідний код.
Justin Dearing

4

Якщо потрібний електронний лист є також Основним іменем користувача, ви можете отримати його

whoami /upn

Однак це працює лише для отримання електронної пошти поточного користувача, а не будь-якого користувача, оскільки питання спочатку було поставлено.


Використовували цей метод, запустивши cmd як цільового користувача. Працював як шарм
Даніель

1
Це також повертає лише UPN, який не обов'язково відповідає загальнодоступній електронній адресі користувача за замовчуванням, особливо якщо домен AD - .local або щось подібне, а не зареєстрований публічний домен.
Крейг

1
@Craig Перше речення моєї відповіді говорить про те, що ...
krispy

2

Встановіть Powershell та пакет додатків QuestAD. Тоді це щось на кшталт:

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

2

Ви можете написати простий 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 Explorer, перейдіть до користувача та подивіться, що він відображає у текстовому полі "Шлях"

У моєму випадку це було щось на кшталт CN = [ім'я користувача], CN = Користувачі, DC = [ім'я міста], DC = [ім'я компанії], DC = com,


2

LINQ до всього ! Для зручності:

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();

2

Знайшов цю нитку, яка допомогла мені отримати те, що я хотіла. Для отримання будь-яких атрибутів користувачів 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. (Можливо, для входу в систему ..., але набагато повільніше.)

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 спричинив закінчення значення порожнім пробілом. Видалено це для виправлення. (Встановіть %% A = %% B & setx ...) Також з'ясувалося, що для належної роботи сценарію потрібно експортувати щонайменше два атрибути.

Запізнення у відповідь, але якщо це може допомогти комусь там, я задоволений.


1

Я не знаю, він відповідає середньому чи ні, стартеру. Але я просто знаходжу рішення своєї існуючої проблеми, яка вже була вирішена після перегляду цієї теми. Пошук ідентифікатора входу користувача на основі АДРЕСИ ЗНАНОЇ ПОШТИ . :)

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" псевдонім "ім'я для входу користувача". Це все, шановні. Будь-які ідеї для вдосконалення вітаються. :)


-1

Нижче наведено пакетний сценарій, який я написав для чогось іншого, але його можна використовувати для пошуку атрибута електронної пошти в 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


Там багато роботи, і сценарій, ймовірно, корисний у тому середовищі, для якого він був написаний, але я не бачу, як він краще відповідає на питання, ніж інші набагато короткіші відповіді, які не потребують введення IP-адрес і які вже були тут роками (більше семи у випадку прийнятого). Є набагато новіші та не відповіді на запитання, які оцінять ваше відвідування!
Закон29
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.