Baris perintah alamat email permintaan direktori aktif untuk nama pengguna


18

Pada Windows XP di lingkungan direktori aktif - apa cara termudah bagi saya untuk menanyakan alamat email pengguna dari AD yang diberikan nama pengguna mereka pada baris perintah.

(Dengan asumsi saya tahu di mana ia disimpan secara normal di pohon).

(Aku tahu tentang net user loginname / domain tapi aku hanya ingin email address elemen kembali.)


3
Harap perhatikan bahwa jika Anda berada di Exchange yang kompleks, atribut "mail" mungkin bukan alamat email yang Anda cari. Anda juga perlu melihat atribut multi-nilai "proxyAddresses" pada objek pengguna.
Ryan Fisher

Jawaban:


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

Kehilangan sebanyak itu ... :)
TheCleaner

1
OK - mungkin saya tidak jelas - tetapi Anda cukup dekat - apa yang saya kira saya inginkan adalah: pengguna dsquery -samid "loginname" | dsget user -email
Hawkeye

6

pengguna dsquery -nama "Firstname Lastname" | pengguna dsget -email


5

sesuatu seperti dsquery ini mungkin berhasil.

kueri email dengan nama pengguna dsquery.exe * -filter "(& (objectClass = pengguna) (! (objectClass = komputer) (sAMAccountName = nama pengguna)))" | pengguna dsget -email

Saya salah membaca posting terlebih dahulu dan mengira Anda menginginkan nama pengguna dari nama email. Itu sebabnya saya memposting yang ini. dsquery.exe * -filter "(& (objectClass = user) (! (objectClass = komputer) (mail=user@domain.com)))" -attr username

berdasarkan pada beberapa skrip yang sedang bekerja dan situs ini yang memiliki beberapa ide lain http://www.petri.co.il/forums/showthread.php?t=18464 tentang penggunaan csvde.exe



4

Jika email yang Anda inginkan juga merupakan Nama Pokok Pengguna, Anda bisa mendapatkannya

whoami /upn

Namun, ini hanya berfungsi untuk mendapatkan email dari pengguna saat ini, bukan pengguna mana pun sebagaimana pertanyaan yang didalilkan semula.


Digunakan metode ini dengan menjalankan cmd sebagai pengguna target. Bekerja seperti pesona
Daniel

1
Ini juga hanya mengembalikan UPN, yang tidak harus sama dengan alamat email publik default pengguna, terutama jika domain AD .local atau yang serupa daripada domain publik terdaftar.
Craig

1
@Craig Kalimat pertama jawaban saya mengatakan bahwa ...
krispy

2

Instal Powershell, dan paket addon QuestAD. Maka itu adalah sesuatu seperti:

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

2

Anda dapat menulis VBScript sederhana untuk permintaan melalui LDAP Buat file dengan ekstensi VBS

Taruh di dalam sesuatu seperti ini

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 

Masukkan NAMA PENGGUNA yang benar ke dalam string kueri LDAP, jalankan file VBS, dan nikmati :)

Jika ini adalah pertama kalinya Anda bekerja dengan LDAP, mungkin sedikit rumit untuk menulis kueri LDAP Untuk mengenali jalur LDAP kepada pengguna (yaitu apa yang perlu Anda tempatkan setelah LDAP: //) Anda dapat mengunduh Active Directory Explorer dari Microsoft Run explorer, navigasikan ke pengguna dan lihat apa yang ditampilkan di kotak teks Path

Dalam kasus saya itu adalah sesuatu seperti CN = [nama pengguna], CN = Pengguna, DC = [city_name], DC = [nama_perusahaan], DC = com,


2

LINQ untuk semuanya ! Untuk kenyamanan:

1) Dalam properti kueri LinqPad, tambahkan referensi ke System.DirectoryServices.AccountManagement.dll. 2) Impor Namespace Tambahan: System.DirectoryServices.AccountManagement

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

2

Menemukan utas ini yang membantu saya mendapatkan apa yang saya inginkan. Untuk mendapatkan atribut pengguna AD ke dalam variabel lingkungan. Skrip ini mengambil semua atribut yang diinginkan dari pengguna yang masuk dan menetapkan variabel lingkungan yang sesuai. Saya awalan variabel tetapi itu opsional, jadi nama variabel menjadi "AD [atribut name]". Atribut adalah pilihan Anda, cukup tambahkan atau hapus atribut Anda setelah -attr. Tidak terlalu berguna untuk atribut multinilai. Nilai (satu) terakhir masuk ke variabel lingkungan.

Skrip ini bersifat lokal ke cmd.exe saat ini

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

Untuk mendapatkan variabel lingkungan global di windows kita dapat menggunakan "setx" di windows 7. (Untuk naskah masuk mungkin ... tapi jauh lebih lambat.)

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: karakter spasi di akhir set-statement dalam contoh 2 menyebabkan nilai diakhiri dengan ruang kosong. Dihapus untuk memperbaikinya. (Set %% A = %% B & setx ...) Juga menemukan bahwa Anda harus mengekspor setidaknya dua atribut agar skrip berfungsi dengan baik.

Respons yang terlambat, tetapi jika itu bisa membantu siapa pun di luar sana, aku senang.


1

Saya tidak tahu itu cocok dengan maksud thread starter atau tidak. Tapi saya hanya menemukan solusi dari masalah saya yang sudah ada yang diselesaikan setelah menelusuri utas ini. Menemukan ID PENGGUNA LOGIN berdasarkan KNOWN MAIL ALAMAT . :)

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

File [ salesforce-uid-mail-address.txt ] berisi daftar alamat email. File [ salesforce-uid-cn.txt ] berisi "lengkapi CN dengan path". Dan file [ salesforce-uid-samid.txt ] berisi "found SAMID" alias "nama login pengguna". Itu semua orang. Setiap ide untuk perbaikan dipersilahkan. :)


-1

Di bawah ini adalah skrip batch yang saya tulis untuk sesuatu yang lain tetapi dapat digunakan untuk menemukan atribut email dalam CN tanpa terlalu banyak masalah.


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


Ada banyak pekerjaan di sana dan skrip mungkin berguna di lingkungan yang ditulis, tetapi saya gagal melihat bagaimana itu menjawab pertanyaan dengan lebih baik daripada jawaban yang jauh lebih pendek lainnya yang tidak memerlukan input IP dan yang sudah naik di sini selama bertahun-tahun (lebih dari tujuh dalam kasus yang diterima). Ada banyak pertanyaan baru dan belum terjawab yang akan menghargai kunjungan Anda!
Law29
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.