PowerShell kullanarak, şu anda oturum açmış olan etki alanı kullanıcısının tam adını (yalnızca kullanıcı adını değil) ActiveDirectory modülüne ihtiyaç duymadan nasıl alabilirim?
PowerShell kullanarak, şu anda oturum açmış olan etki alanı kullanıcısının tam adını (yalnızca kullanıcı adını değil) ActiveDirectory modülüne ihtiyaç duymadan nasıl alabilirim?
Yanıtlar:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
İade:
John Doe
Bazı diğer (çoğunlukla) karanlık özellikler de mevcuttur. Birkaç yararlı olanlar:
Deneyin:
[adsi]"WinNT://$dom/$usr,user" | select *
Kabul edilen cevabı beğendim ama sadece bunu kendim denemek istediğim için:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
döner:
FullName
--------
TheCleaner
veya başlık bilgisini ve sadece sonucu elde etmek istemiyorsanız:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Powershell 3.0 kullanan bir astar:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Craig620'nin kabul edilen cevabı hakkındaki yorumuna dayanarak,
Bu komutu çalıştırmak için etki alanı yöneticisi haklarına ihtiyacım var mı? Veya etki alanı kullanıcısının kendisi bu komutu çalıştırabilir mi?
Kullanıcı iş istasyonlarına powershell modülleri kurmaktan kaçınmaya çalışıyorsunuz gibi görünüyor, evet, ama aynı zamanda, hayır, AD'de kendi adınızı aramak için bir etki alanı yöneticisi olmanıza gerek yok. Standart kullanıcı olarak tam adı da dahil olmak üzere Outlook'taki GAL'de görünen tüm bilgileri hemen hemen arayabilirsiniz.
AD’de başkalarının tam adlarını standart bir kullanıcı olarak da arayabilirsiniz ( Get-WmiObject Win32_userAccount
AD modüllerinden kaçınmak istiyorsanız). AD'yi sorgulayan hizmet hesapları (yani, yönetilen hizmet hesaplarından önce ) genellikle standart, ayrıcalıklı olmayan AD kullanıcılarıdır.
-Match kullanımı iyi bir seçim değildir çünkü "en": "ed" adlı bir USERNAME "fred" ve "edith" ile eşleşecektir. Bunun yerine tam bir eşleşme için -eq kullanın ve gerekirse etki alanına ekleyin. Önde gelen ve izleyen bir yeni satır basan "fullname | ft -HideTableHeaders" seçeneğine alternatif olarak tüm önde gelen bir boşluk alanını çıkarmak için bir foreach döngüsü kullanıyorum.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Her zaman .Net 3.5 veya yukarısına sahipseniz (ki bu PowerShell v4.0 ve üzeri sürümlerde olmalıdır):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
Bu sınıf, tüm genel LDAP özelliklerine çok kolay erişim sağlar; bu nedenle [ADSISearcher]
, WinNT'nin uygulayamadığı bazı genişletilmiş özellikler istiyorsanız, iki kez aramanız (bir kez WinNT ve tekrar LDAP ile) veya LDAP araması yapmak için kullanmanız gerekmez. .
Active Directory modülünü kullanmak istemiyorsanız, kullanamazsınız; daha derine inip bir etki alanı denetleyicisine karşı gerçek bir LDAP sorgusu gerçekleştirmek istemediğiniz sürece.
Kullanıcı adı dışındaki herhangi bir kullanıcı bilgisi Active Directory'de saklanır ve o adrese götürülmelidir.
[ADSI]
arabirim AD modüllerinden çok daha uzun sürdü ve kabul edilen yanıtın gösterdiği gibi tüm bu kadar karmaşık değil.