ที่อยู่อีเมลแบบสอบถามไดเรกทอรีที่ใช้งานบรรทัดคำสั่งสำหรับชื่อผู้ใช้


18

ใน Windows XP ในสภาพแวดล้อม Active Directory - วิธีที่ง่ายที่สุดสำหรับฉันในการค้นหาที่อยู่อีเมลของผู้ใช้จาก AD คือกำหนดชื่อผู้ใช้ในบรรทัดคำสั่ง

(สมมติว่าฉันรู้ว่ามันถูกเก็บไว้ตามปกติในต้นไม้)

(ฉันรู้เกี่ยวกับผู้ใช้เน็ตloginnameโดเมน / แต่ฉันเพียงแค่ต้องการที่อยู่อีเมลขององค์ประกอบกลับ.)


3
โปรดทราบว่าหากคุณอยู่ในการแลกเปลี่ยนที่ซับซ้อนแอตทริบิวต์ "mail" อาจไม่ใช่ที่อยู่อีเมลที่คุณต้องการ คุณจะต้องดูแอตทริบิวต์หลายค่า "proxyAddresses" บนวัตถุผู้ใช้
Ryan Fisher

คำตอบ:


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

พลาดไปมาก ... :)
TheCleaner

1
ตกลง - บางทีฉันไม่ชัดเจน - แต่คุณอยู่ใกล้พอ - สิ่งที่ฉันคิดว่าฉันต้องการคือ: ผู้ใช้ dsquery -samid "loginname" | ผู้ใช้ dsget
Hawkeye


5

บางอย่างเช่น dsquery นี้อาจทำงานได้

แบบสอบถามอีเมลโดยใช้ชื่อผู้ใช้ dsquery.exe * -filter "(& (objectClass = ผู้ใช้) (! (objectClass = คอมพิวเตอร์) (sAMAccountName = ชื่อผู้ใช้))" | ผู้ใช้ dsget -email

ฉันอ่านผิดโพสต์ก่อนและคิดว่าคุณต้องการชื่อผู้ใช้จากชื่ออีเมล นั่นเป็นเหตุผลที่ฉันโพสต์สิ่งนี้ dsquery.exe * -filter "(& (objectClass = ผู้ใช้) (! (objectClass = คอมพิวเตอร์) (mail=user@domain.com)))" ชื่อผู้ใช้ -attr

ขึ้นอยู่กับสคริปต์บางส่วนในที่ทำงานและเว็บไซต์นี้ซึ่งมีความคิดอื่น ๆhttp://www.petri.co.il/forums/showthread.php?t=18464เกี่ยวกับการใช้ csvde.exe


4

adfind -sc u: จดหมาย "ชื่อผู้ใช้"


เป็นเครื่องมือที่มีประโยชน์จริงแม้ว่ามันจะยอดเยี่ยมกว่านี้หากผู้จัดหาซอร์สโค้ด
Justin Dearing

4

หากอีเมลที่คุณต้องการเป็นชื่อผู้ใช้หลักคุณสามารถรับได้ด้วย

whoami /upn

อย่างไรก็ตามวิธีนี้ใช้เพื่อรับอีเมลของผู้ใช้ปัจจุบันเท่านั้นไม่ใช่ผู้ใช้ใด ๆ เนื่องจากเป็นคำถามที่โพสต์ในตอนแรก


ใช้วิธีนี้โดยการเรียกใช้ cmd เป็นผู้ใช้เป้าหมาย ทำงานเหมือนมีเสน่ห์
Daniel

1
สิ่งนี้จะส่งกลับ UPN เท่านั้นซึ่งไม่จำเป็นต้องเหมือนกับที่อยู่อีเมลสาธารณะเริ่มต้นของผู้ใช้โดยเฉพาะอย่างยิ่งหากโดเมนโฆษณานั้นเป็น. local หรือสิ่งที่คล้ายกันมากกว่าเป็นโดเมนสาธารณะที่ลงทะเบียน
เครก

1
@Craig ประโยคแรกของคำตอบของฉันบอกว่า ...
krispy

2

ติดตั้ง Powershell และชุด addon 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 

ใส่ USER NAME ที่ถูกต้องลงในสตริงการค้นหาของ LDAP เรียกใช้ไฟล์ VBS แล้วสนุกไปกับ :)

ถ้านี่เป็นครั้งแรกที่คุณทำงานกับ LDAP มันอาจจะซับซ้อนเล็กน้อยในการเขียนแบบสอบถาม LDAP เพื่อให้รู้จักเส้นทาง LDAP ไปยังผู้ใช้ (เช่นสิ่งที่คุณต้องใส่หลัง LDAP: //) คุณสามารถดาวน์โหลดActive Directory Explorerจาก Microsoft Run explorer นำทางไปยังผู้ใช้และดูสิ่งที่แสดงในกล่องข้อความ Path

ในกรณีของฉันมันเหมือนกับ CN = [ชื่อผู้ใช้], CN = ผู้ใช้, DC = [city_name], DC = [company_name], 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

ฉันไม่รู้ว่ามันตรงกับค่าเริ่มต้นของเธรดหรือไม่ แต่ฉันเพิ่งพบทางออกของปัญหาที่มีอยู่ซึ่งแก้ไขแล้วหลังจากเรียกดูกระทู้นี้ หา USER ID เข้าสู่ระบบตามที่อยู่ :)

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 และนั่นก็หมดไปแล้ว ที่นี่มานานหลายปี (มากกว่าเจ็ดในกรณีที่ได้รับการยอมรับ) มีคำถามที่ยังไม่ได้ตอบล่าสุดและอื่น ๆ อีกมากมายที่จะขอบคุณการเยี่ยมชมของคุณ!
Law29
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.