Dòng lệnh truy vấn thư mục địa chỉ email cho tên người dùng


17

Trên Windows XP trong môi trường thư mục Hoạt động - cách dễ nhất để tôi truy vấn địa chỉ email của người dùng từ AD được cung cấp tên người dùng của họ trên dòng lệnh.

(Giả sử tôi biết nơi nó được giữ bình thường trên cây).

(Tôi biết về loginname / domain của người dùng mạng nhưng tôi chỉ muốn phần tử địa chỉ email quay lại.)


2
Xin lưu ý rằng nếu bạn đang ở trong một Exchange phức tạp, thuộc tính "mail" có thể không phải là địa chỉ email bạn đang tìm kiếm. Bạn cũng sẽ cần xem thuộc tính "proxyAddresses" thuộc tính đa giá trị trên đối tượng người dùng.
Ryan Fisher

Câu trả lời:


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

Bỏ lỡ nó rất nhiều ... :)
TheCleaner

1
Ok - có lẽ tôi đã không rõ ràng - nhưng bạn đã đủ gần - điều tôi đoán tôi muốn là: người dùng DSquery -samid "loginname" | dsget user -email
Hawkeye

6

người dùng DSquery -name "Tên họ Tên" | người dùng tin nhắn


5

một cái gì đó giống như câu hỏi này có thể làm việc

truy vấn email theo tên người dùng dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (sAMAccountName = username)))" | người dùng tin nhắn

Tôi đã đọc sai bài đăng đầu tiên và nghĩ rằng bạn muốn tên người dùng từ tên email. Đó là lý do tại sao tôi đăng bài này. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = computer) (mail=user@domain.com)))" -attr tên người dùng

dựa trên một số tập lệnh tại nơi làm việc và trang web này có một số ý tưởng khác http://www.petri.co.il/forums/showthread.php?t=18464 về việc sử dụng csvde.exe



4

Nếu email bạn muốn cũng là Tên hiệu trưởng người dùng, bạn có thể nhận nó với

whoami /upn

Tuy nhiên, điều này chỉ hoạt động để có được email của người dùng hiện tại, không phải bất kỳ người dùng nào như câu hỏi ban đầu được đưa ra.


Đã sử dụng phương pháp này bằng cách chạy cmd làm người dùng đích. Làm việc như một lá bùa
Daniel

Điều này cũng chỉ trả về UPN, không nhất thiết giống như địa chỉ email công khai mặc định của người dùng, đặc biệt nếu miền AD là .local hoặc một cái gì đó tương tự chứ không phải là miền công cộng đã đăng ký.
Craig

1
@Craig Câu đầu tiên trong câu trả lời của tôi nói rằng ...
krispy

2

Cài đặt Powershell và gói addon QuestAD. Sau đó, nó là một cái gì đó như:

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

2

Bạn có thể viết VBScript đơn giản để truy vấn thông qua LDAP Tạo tệp có phần mở rộng VBS

Đặt bên trong một cái gì đó như thế này

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 

Đặt TÊN NGƯỜI DÙNG chính xác vào chuỗi truy vấn LDAP, chạy tệp VBS và tận hưởng :)

Nếu đây là lần đầu tiên bạn làm việc với LDAP, việc viết truy vấn LDAP có thể hơi phức tạp một chút để nhận ra đường dẫn LDAP cho người dùng (tức là những gì bạn cần đặt sau LDAP: //) bạn có thể tải xuống Active Directory Explorer từ Microsoft Run explorer, điều hướng đến người dùng và xem những gì nó hiển thị trong hộp văn bản Đường dẫn

Trong trường hợp của tôi, nó giống như CN = [tên người dùng], CN = Users, DC = [city_name], DC = [company_name], DC = com,


2

LINQ cho tất cả mọi thứ ! Cho thuận tiện:

1) Trong thuộc tính truy vấn của LinqPad, hãy thêm một tham chiếu đến System.DirectoryService.AccountManloyment.dll. 2) Nhập không gian tên bổ sung: System.DirectoryService.AccountQuản lý

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();

2

Tìm thấy chủ đề này đã giúp tôi có được những gì tôi muốn. Để có được bất kỳ thuộc tính người dùng AD vào các biến môi trường. Kịch bản lệnh này lấy tất cả các thuộc tính mong muốn từ người dùng đã đăng nhập và đặt một biến môi trường tương ứng. Tôi đã thêm tiền tố vào các biến nhưng đó là tùy chọn, vì vậy tên biến trở thành "AD [tên thuộc tính]". Các thuộc tính là lựa chọn của bạn, chỉ cần thêm hoặc xóa thuộc tính của bạn sau -attr. Không hữu ích lắm cho các thuộc tính đa trị. Giá trị cuối cùng (một) đi vào biến môi trường.

Kịch bản này là cục bộ của cmd.exe hiện tại

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

Để có được các biến môi trường toàn cầu trong windows, chúng ta có thể sử dụng "setx" trong windows 7. (Đối với bản ghi có lẽ ... nhưng chậm hơn nhiều.)

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: một ký tự khoảng trắng ở cuối câu lệnh set trong ví dụ 2 khiến giá trị kết thúc bằng khoảng trống. Loại bỏ nó để sửa chữa. (Đặt %% A = %% B & setx ...) Cũng phát hiện ra rằng bạn phải xuất ít nhất hai thuộc tính để tập lệnh hoạt động chính xác.

Một hồi âm muộn, nhưng nếu nó có thể giúp bất cứ ai ngoài đó thì tôi rất vui.


1

Tôi không biết nó có phù hợp với chủ đề khởi động hay không. Nhưng tôi chỉ tìm một giải pháp cho vấn đề hiện tại của tôi đã được giải quyết sau khi duyệt chủ đề này. Tìm ID người dùng ĐĂNG NHẬP dựa trên ĐỊA CHỈ KNOWN MAIL . :)

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

Tệp [ salesforce-uid-mail-address.txt ] chứa danh sách các địa chỉ email. Tệp [ salesforce-uid-cn.txt ] chứa "CN hoàn chỉnh với đường dẫn". Và tệp [ salesforce-uid-samid.txt ] chứa "tên đăng nhập người dùng SAMID" bí danh ". Đó là tất cả mọi người. Bất kỳ ý tưởng để cải thiện đều được chào đón. :)


-1

Dưới đây là một tập lệnh bó tôi đã viết cho một cái gì đó khác nhưng nó có thể được sử dụng để tìm thuộc tính e-mail trong CN mà không gặp quá nhiều vấn đề.


:: 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


Có rất nhiều công việc ở đó và kịch bản có thể hữu ích trong môi trường được viết, nhưng tôi không thấy cách nó trả lời câu hỏi tốt hơn những câu trả lời ngắn hơn nhiều khác không cần đầu vào của IP và đã được đưa lên ở đây trong nhiều năm (hơn bảy trong trường hợp của một người được chấp nhận). Có rất nhiều câu hỏi gần đây và chưa được trả lời sẽ đánh giá cao một chuyến thăm từ bạn!
Luật29
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.