• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

active directory de ki kullanıcı ad soyadı yazdırma

Katılım
29 Ekim 2009
Mesajlar
130
Excel Vers. ve Dili
2010 ENG-TR
Merhaba,

Form içersinde bir çok arama yaptım ama malesef istediğim çözüme ulaşamadım. benim sıkıntım yaptığımız bir excel çalışması için gerekli, bu excel çalışması şirketimiz içersinde bir çok kullanıcıya gönderilecek ve excelin belli satırlarında active directory e kayıtlı olan kullanıcıların Ad ve Soyadlarının gözükmesi gerekiyor. Bulduğum çözümler genelde Environ kullanılarak yapılan çözümler ve malesef sadece logon name görülüyor.

örneğin; kullanıcının adı Boğaçhan Koç ama environ kullanıldığında bogachank görülüyor. Ekte internetten bulduğum ve birazcıkta kendimden birşeyler eklediğim bir çalışma bulunuyor. umarım başka arkadaşların işine yarar.

Sevgili üstadlarım yardımınızı rica ediyorum ve gelicek cevaplar için şimdiden şükranlarımı sunuyorum.

saygılarımla.
 
Son düzenleme:
Sevgili arkadaşlar ve üstatlar,

aşağıya eklediğim dosyada GetName isimli sayfada bir önceki mailde istediğime yakın bir bilgi buldum, yanlız sorun şu ki burada yazan kullanıcı adları environ ve application.username kullanılarak yapılmış. yani office kaydında geçen isim buraya yansımakta. Her kullanıcının office kurulumunda kullanıcı adı soyadı tam yazmamakta veya gelişi güzel harf dizinleri ile geçilmekte. yinede arkadaşlarımın işine yarar umuduyla bu ve environ çalışmasına ek olarak belirtilen herhangibir dizini alt dizinleri ve kısa yolları ile listeleyen bir çalışmayı ekliyorum.

Sevgili üstatlar, acil yardımınızı bekliyorum.

sevgi ve saygılarımla.
 
Son düzenleme:
Eğer sistem yöneticisi, bilgisayarların özelliklerinde kullanıcıların gerçek kimliklerini girmiş ise, aşağıdaki kodla hem ağ üzerinde, içinde bulunduğunuz domain deki kullanıcı adlarını, hem de kullanıcıların gerçek adları listelenecektir.

Kod:
Sub ListPC2()
    strDom = "[COLOR=Red][B]DOMAIN_ADI[/B][/COLOR]"
    Set MyDom = GetObject("WinNT://" & strDom)
    MyDom.Filter = Array("user")
    For Each User In MyDom
        i = i + 1
        Cells(i, 1) = User.Name
        Cells(i, 2) = User.FullName
    Next
End Sub

Formda Haluk Beyin yazdığı bir kodu yakaladım,

Haluk bey bu kodunuzda ilgili domaindeki tüm makinaların kullanıcı adları ve gerçek adları çıkıyor, bunu sadece ilgili makinayı kapsıyacak şekilde yeniden yapılandırabilirmisiniz. Yani dosyanın açıldığı makinadaki kullanıcı adını ve gerçek adı. yardımınızı rica ederim.

iyi çalışmalar.
 
Arşivimde böyle bir örnek buldum acaba işinizi görür mü ?
Kod:
Sub Comp_Domain_User()
Dim Wsh As Variant 'WshNetwork
Dim a As String, b As String, c As String

Set Wsh = CreateObject("WScript.Network")
'Set Wsh = New WshNetwork
 
'Bilgisayar Adı
a = Wsh.ComputerName
 
'Domain Adı
b = Wsh.UserDomain
 
'Kullanıcı Adı
c = Wsh.UserName
 
MsgBox "Bilgisayar Adı :  " & a & Chr(10) & _
   "Domain    Adı :  " & b & Chr(10) & _
   "Kullanıcı   Adı  : " & c
End Sub
 
Öncelikle cevabınız için çok teşekkür ederim ama malesef istediğim veriyi vermiyor Hamitcan Bey,

bu verilere environ ile de ulaşabiliyorum, benim ihtiyacım olan AD deki full name, bir önceki mailde Haluk beyin yazdığı kodda (eğer çalıştığınız ortam uygunsa çalıştırırsanız görüceksiniz) User.FullName kodu ile domaindeki aktif kayıtlı kullanıcıların kayıt edilen Ad soyadları geliyor. Aslında aşağıdaki kodu sadece ilgili makinanın (tüm ağın değilde) user.name ve user.fullname 'ini gösterecek hale getirebilirseniz sorun çözülmüş olacaktır. malesef ben bir türlü beceremedim. :frown:

Lütfen yardım.
Sub ListPC2() strDom = "DOMAIN_ADI" Set MyDom = GetObject("WinNT://" & strDom) MyDom.Filter = Array("user") For Each User In MyDom i = i + 1 Cells(i, 1) = User.Name Cells(i, 2) = User.FullName Next End Sub
Saygılarımla.
 
İki kodu birleştirerek birşey yaptım. Bir de böyle deneyin.
Kod:
Function KullanicininTumIsımleri(KullaniciAdi As String)
    strDom = "Domain İsmi"
    Set MyDom = GetObject("WinNT://" & strDom)
    MyDom.Filter = Array("user")
    For Each user In MyDom
        If KullaniciAdi = user.Name Then
          KullanicininTumIsımleri = user.Name & " " & user.FullName
        End If
    Next
End Function
Function Kullanici()
    Dim Wsh As Variant
    Dim a As String, b As String, c As String
    Set Wsh = CreateObject("WScript.Network")
    Kullanici = Wsh.UserName
End Function
Sub AktifKullanici()
    MsgBox KullanicininTumIsımleri(Kullanici)
End Sub
 
Hamitcan bey,

Tekrar yardımınız için teşekkür ederim ama box açıldığında boş (null) geliyor, aslında box a ihtiyacım yok herhangibir hücreye yazması yeterli ama yinede emeğiniz için teşekkür ederim. Artık boş bir zamanda incelersiniz, fazla vaktinizi çalmak istemiyorum, sonuçta sizinde şahsi bir sürü işiniz var ve başka arkadaşlarında yardımınıza ihtiyacı vardır. :yazici:

İlginiz için tekrar tekrar teşekkür ederim.

Sevgiler ve Saygılar
 
Birkaç noktaya dikkat çekeyim;
1-) "Domain ismini" değiştirdiniz mi ?
2-) Verdiğim kod sonuç üretiyor mu ?

Kod:
Sub test()
MsgBox Kullanici
End Sub
 
Hamitcan bey,

Domain ismi tabiki değişti (xxx.local), Haluk beyin verdiği kodda da değiştirerek çalıştırdığımda sonuç alıyorum,
ikinci verdiğiniz kod malesef sonuç üretmiyor, yaptığınız düzenlemede de aynı sonuç karşıma çıkmıştı. Tavsiyeniz?

Not : Ekran görüntüsü ektedir.
 
Son düzenleme:
Bir de böyle deneyin.
Kod:
Function KullanicininTumIsımleri(KullaniciAdi As String)
    strDom = "Domain İsmi"
    Set MyDom = GetObject("WinNT://" & strDom)
    MyDom.Filter = Array("user")
    For Each user In MyDom
        If KullaniciAdi = user.Name Then
          KullanicininTumIsımleri = user.Name & " " & user.FullName
        End If
    Next
End Function

Sub AktifKullanici()
    MsgBox KullanicininTumIsımleri(Environ("username"))
End Sub
 
Hamitcan Bey,

aşağıda yazdığım sub ruitn için Compile Error: sub or function not defined hatası verdi.

Sub AktifKullanici() MsgBox KullanicininTumIsımleri(Environ("username")) End Sub
 
Bir hata yapmışım, 10 nolu mesajımı düzelttim, bir kez daha deneyin.
 
Ben, kendi makinemde yakaladım sonucu ama zannedersem siz de ("username") tanımlı değil.
 
Kastınız eğer Environ("username") ise bu koda cevap alabiliyorum, aslında 2. mesajımda gönderdiğim rutinlerin tamamında cevap alabiliyorum. environ olarak tüm kodlarda ve de Haluk beyin yazdığı koddada, sonuçlar sıkıntısız dönüyor.

Hamitcan bey sizi çok uğraştırıyorum, boynum eğik bu konuda. Sıkıntı veriyorsam kusuruma bakmayın lütfen.
 
Haluk bey'in kodlarını çalıştırdığınızda elde ettiğiniz sonuç(username) ile Environ("username") kodunu çalıştırarak çıkan sonucun aynı olması gerekiyor ki ben de buradan yola çıktım ama siz de nedense, boş değer döndürüyor, anlayamadım.
 
Kesinlikle size katılıyorum, ki gerek environ kullanarak gerekse Haluk Beyin çalışmasını kullanarak çektiğim sonuçlar aynı. farklı bir domainde de ve farklı bir makinada da denedim aynı sonuç. döngünüzü biraz anlamaya çalıştım, sizin kurduğunuz kodda herhangibir sıkıntı göremedim, anlayabildiğim kadarı ile doğru bir mantığık var ama boş dönmesini bir türlü bende anlam veremedim. işletim sisteminden veya ofis versiyonundan mi diyecem ama o zaman diğer kodlarında çalışmaması gerekir. acaba Group Policy mi?
 
Kesinlikle size katılıyorum, ki gerek environ kullanarak gerekse Haluk Beyin çalışmasını kullanarak çektiğim sonuçlar aynı. farklı bir domainde de ve farklı bir makinada da denedim aynı sonuç.

Her iki şekilde de sonuç alıyorsanız msgbox boş değer getirmemeli diye düşünüyorum.
 
Hamitcan bey günaydın,

farklı domain ve farklı işletim sistemi kombinasyonunda da problem yaşadım ve karşıma ekteki 1 nolu resimdeki gibi sonuç geliyor. oysa 2 numaralı resimde de gördüğünüz gibi makronun en altında yazan environ kullanan msg box sonuç verebiliyor ki kodun tamamı da ayrıca çalışarak cevap veriyor. benim de sizin gibi kafam karıştı. diğer kodlar çalışıyor, sizin makinanızda çalışıyor burda nasıl çalışmıyor? yazdığım kodda yanlış bir işlemmi yapıyorum acaba? değerli fikrinizi ve yol göstermenizi öğrenmek isterim?

saygılarımla.
 
Son düzenleme:
Baştan düşünelim; kodu Environ fonksiyonunu kullanarak çalıştırdığınızda bogachank sonucuna ulaşıyorsunuz. Yine Haluk bey'in verdiği kodu kullanarak çalıştırdığınızda da bogachank sonucuna ulaşıyorsunuz. Benim verdiğim kod da bu iki sonucu karşılaştırarak tüm isimlere ulaşmak.
Boşluk olma ihtimaline karşılık, bir de şu satırı değiştirerek deneyin.
Kod:
If KullaniciAdi = user.Name Then
Kod:
If trim(KullaniciAdi) = trim(user.Name) Then
 
Geri
Üst