Dengan menggunakan PowerShell, bagaimana saya bisa mendapatkan nama lengkap pengguna domain yang saat ini masuk (tidak hanya nama pengguna) tanpa perlu modul ActiveDirectory?
Dengan menggunakan PowerShell, bagaimana saya bisa mendapatkan nama lengkap pengguna domain yang saat ini masuk (tidak hanya nama pengguna) tanpa perlu modul ActiveDirectory?
Jawaban:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Pengembalian:
John Doe
Beberapa properti lain (kebanyakan) tidak jelas juga tersedia. Beberapa yang bermanfaat:
Mencoba:
[adsi]"WinNT://$dom/$usr,user" | select *
Saya suka jawaban yang diterima, tetapi hanya karena saya ingin mencoba ini sendiri:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
pengembalian:
FullName
--------
TheCleaner
atau jika Anda ingin tidak memiliki info tajuk dan hanya hasilnya:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Satu liner menggunakan Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Berdasarkan komentar Anda pada jawaban yang diterima Craig620,
Apakah saya memerlukan hak admin domain untuk menjalankan perintah ini? Atau bisakah pengguna domain itu sendiri dapat menjalankan perintah ini?
Kedengarannya Anda mencoba menghindari memasang modul PowerShell di workstation pengguna, ya, tetapi juga, tidak, Anda tidak perlu menjadi admin domain untuk mencari nama Anda sendiri dalam AD. Anda dapat melihat hampir semua informasi yang muncul di GAL di Outlook, termasuk nama lengkap, sebagai pengguna standar.
Anda juga dapat mencari nama lengkap orang lain sebagai pengguna standar dalam AD (menggunakan Get-WmiObject Win32_userAccount
, jika Anda ingin menghindari modul AD). Akun layanan yang meminta AD (baik, sebelum akun layanan terkelola ) biasanya standar, pengguna AD yang tidak beruntung.
Menggunakan -match bukan pilihan yang baik karena $ env: USERNAME dari "ed" akan cocok dengan "fred" dan "edith". Alih-alih gunakan-eq untuk pencocokan tepat dan tambahkan domain jika perlu. Saya menggunakan foreach loop di akhir untuk menghapus semua yang memimpin spasi spasi sebagai alternatif untuk "pilih nama lengkap | ft -HideTableHeaders" yang mencetak baris baru yang memimpin dan tertinggal.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Jika Anda selalu mendapat .Net 3.5 atau lebih tinggi (yang harus Anda lakukan dengan PowerShell v4.0 dan lebih tinggi):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
Kelas itu menyediakan akses yang sangat mudah ke semua properti LDAP umum, jadi Anda tidak perlu mencari dua kali (sekali dengan WinNT dan sekali lagi dengan LDAP) atau gunakan [ADSISearcher]
untuk melakukan pencarian LDAP jika Anda menginginkan beberapa properti tambahan yang tidak diimplementasikan oleh WinNT. .
Jika Anda tidak ingin menggunakan modul Active Directory, Anda tidak bisa; kecuali jika Anda ingin masuk lebih dalam dan melakukan permintaan LDAP aktual terhadap pengontrol domain.
Setiap informasi pengguna selain nama pengguna disimpan di Active Directory, dan harus diambil di sana.
[ADSI]
antarmuka telah ada jauh lebih lama daripada modul AD, dan sebenarnya tidak terlalu rumit, seperti yang ditunjukkan oleh jawaban yang diterima.