Windows XP) - 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ıyı biliyorum kullanıcı adı / domain ancak sadece e-posta adresi öğesini geri istiyorum.)
dsquery user -name "user name"|dsget user -samid -email -display
dsquery kullanıcı adı "Adı Soyadı" | dsget kullanıcısı-posta
İ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 gibi herhangi bir kullanıcı değil.
böyle bir şey işe yarayabilir.
kullanıcı adına göre sorgulama 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) ([email protected]))" -attr kullanıcı adı
iş yerinde bazı komut dosyalarını ve başka fikirleri olan bu siteyi temel alan http://www.petri.co.il/forums/showthread.php?t=18464 csvde.exe kullanma hakkında
adfind -sc u: "kullanıcı adı" postası
Powershell'i ve QuestAD eklenti paketini yükleyin. O zaman şöyle bir şeydir:
connect-qadservice
(get-qaduser 'bobsusername').emailAddress
İ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 küresel 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'deki 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.
LDAP aracılığıyla sorgulamak için basit VBScript yazabilirsiniz. VBS uzantılı bir dosya oluşturun
Bunun gibi 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 eklemeniz gerekenler) tanımak için - Active Directory Explorer Microsoft Run Explorer'dan 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,
LINQ - her şey ! Kolaylık için:
1) LinqPad sorgu özelliklerinde, System.DirectoryServices.AccountManagement.dll için 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();
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İNE dayalı 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 dosya [salesforce-uid-samid.txt] "bulunan SAMID" takma adı "kullanıcı oturum açma adı" içerir. Hepsi bu kadar millet. İyileştirme için herhangi bir fikir bekliyoruz. :)