Kullanıcı adı için komut satırı etkin dizin sorgusu e-posta adresi


19

Active Directory ortamında Windows XP'de - komut satırında kullanıcı adı verildiğinde bir kullanıcının e-posta adresini AD'den sorgulamamın en kolay yolu nedir?

(Normalde ağaçta nerede tutulduğunu bildiğimi varsayarsak).

(Net kullanıcı oturum açma adı / alan adını biliyorum, ancak sadece e-posta adresi öğesini geri istiyorum.)


3
Karmaşık bir Exchange'deyseniz, "posta" özelliğinin aradığınız e-posta adresi olmayabileceğini lütfen unutmayın. Ayrıca kullanıcı nesnesindeki çok değerli "proxyAddresses" özelliğine de bakmanız gerekir.
Ryan Fisher

Yanıtlar:


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

O kadar çok
özledim

1
Tamam - belki de net değildim - ama yeterince yakınsın - sanırım istediğim şuydu: dsquery user -samid "loginname" | dsget user -email
Hawkeye

6

dsquery kullanıcı adı "Adı Soyadı" | dsget kullanıcısı-posta


5

böyle bir şey işe yarayabilir.

kullanıcı adına göre sorgu e-postası dsquery.exe * -filter "(& (objectClass = kullanıcı) (! (objectClass = bilgisayar) (sAMAccountName = kullanıcı adı)))" | dsget kullanıcısı-posta

Önce yazıyı yanlış okudum ve e-posta adından kullanıcı adı istediğinizi düşündüm. Bu yüzden bunu gönderdim. dsquery.exe * -filter "(& (objectClass = kullanıcı) (! (objectClass = bilgisayar) (mail=user@domain.com))" -attr kullanıcı adı

iş yerinde bazı komut dosyalarını ve bazı fikirleri olan bu siteyi temel alan http://www.petri.co.il/forums/showthread.php?t=18464 csvde.exe kullanma hakkında


5

İstediğiniz e-posta aynı zamanda Kullanıcı Asıl Adı ise,

whoami /upn

Ancak, bu yalnızca geçerli kullanıcının e-postasını almak için çalışır, başlangıçta önerildiği soru olarak herhangi bir kullanıcı değil.


Hedef kullanıcı olarak cmd'yi çalıştırarak bu yöntemi kullandı. Bir cazibe gibi çalıştı
Daniel

1
Bu aynı zamanda, özellikle AD etki alanı .local veya kayıtlı bir genel etki alanından çok benzerse, kullanıcının varsayılan genel e-posta adresiyle aynı olması gerekmeyen UPN değerini de döndürür.
Craig

1
Cevabım ilk cümlesi söylüyor @Craig ...
krispy


2

Powershell'i ve QuestAD eklenti paketini yükleyin. O zaman şöyle bir şeydir:

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

2

LDAP aracılığıyla sorgulamak için basit VBScript yazabilirsiniz. VBS uzantılı bir dosya oluşturun

Böyle bir şeyin içine koy

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 sorgu dizesine doğru KULLANICI ADI koyun, VBS dosyasını çalıştırın ve keyfini çıkarın :)

LDAP ile ilk kez çalışıyorsanız, LDAP sorgusu yazmak biraz karmaşık olabilir Kullanıcının LDAP yolunu (yani LDAP: // sonra ne koymanız gerekir) tanımak için Active Directory'yi indirebilirsiniz kâşif Microsoft Run , kullanıcıya gidin ve Yol metin kutusunda ne göründüğüne bakın

Benim durumumda CN = [kullanıcı adı], CN = Kullanıcılar, DC = [şehir_adı], DC = [şirket_adı], DC = com,


2

LINQ için her şey ! Kolaylık için:

1) LinqPad'in sorgu özelliklerinde System.DirectoryServices.AccountManagement.dll dosyasına bir başvuru ekleyin. 2) Ek Ad Alanı İçe Aktarma: System.DirectoryServices.AccountManagement

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

2

İstediğimi elde etmeme yardımcı olan bu konuyu buldum. AD kullanıcılarının özniteliklerini ortam değişkenlerine almak için. Bu komut dosyası, oturum açmış kullanıcıdan istenen tüm öznitelikleri alır ve karşılık gelen bir ortam değişkenini ayarlar. Değişkenlerin önekini ekledim ancak isteğe bağlı, bu nedenle değişken adı "AD [öznitelik adı]" olur. Öznitelikler sizin tercihinizdir, sadece -attr öğesinden sonra özniteliğinizi ekleyin veya kaldırın. Yine de çok değerli öznitelikler için çok yararlı değil. Son (bir) değer ortam değişkenine gider.

Bu komut dosyası geçerli cmd.exe için yerel

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

Pencerelerde global ortam değişkenleri elde etmek için, Windows 7'de "setx" kullanabiliriz. (Loginscript için belki ... ama çok daha yavaştır.)

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: örnek 2'de set-ifadesinin sonundaki boşluk karakteri, değerin boş alanla bitmesine neden oldu. Düzeltmek için kaldırıldı. (Set %% A = %% B & setx ...) Ayrıca, komut dosyasının düzgün çalışması için en az iki özelliği dışa aktarmanız gerektiğini öğrendim.

Geç bir cevap ama dışarıdaki herkese yardım edebilirse mutlu olurum.


1

Konu marş ortalamaya uygun olup olmadığını bilmiyorum. Ama sadece bu konuya göz attıktan sonra zaten çözülmüş olan mevcut problemimin bir çözümünü buluyorum. BİLİNEN POSTA ADRESİ temelinde KULLANICI GİRİŞ Kimliğini bulma . :)

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 ] dosyası, e-posta adreslerinin listesini içerir. [ Salesforce-uid-cn.txt ] dosyası "yol ile birlikte tam CN" içeriyor. Ve [ salesforce-uid-samid.txt ] dosyası "bulunan SAMID" takma adı "kullanıcı oturum açma adı" içerir. Hepsi bu kadar millet. İyileştirme için herhangi bir fikir bekliyoruz. :)


-1

Aşağıda başka bir şey için yazdığım bir toplu komut dosyasıdır, ancak çok fazla sorun olmadan bir CN içindeki e-posta özelliğini bulmak için kullanılabilir.


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


Orada çok fazla iş var ve senaryo muhtemelen yazıldığı ortamda yararlıdır, ancak IP'ye giriş gerektirmeyen ve daha önce yapılmış olan diğer daha kısa cevaplardan daha soruyu nasıl daha iyi cevapladığını göremiyorum. Burada yıllarca (kabul edilen durumda yedi'den fazla). Sizden bir ziyareti takdir edecek çok daha yeni ve cevaplanmamış sorular var!
Kanun29
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.