Sử dụng PowerShell, làm cách nào tôi có thể nhận được tên đầy đủ của người dùng tên miền hiện tại (không chỉ tên người dùng của nó) mà không cần mô-đun ActiveDirectory?
Sử dụng PowerShell, làm cách nào tôi có thể nhận được tên đầy đủ của người dùng tên miền hiện tại (không chỉ tên người dùng của nó) mà không cần mô-đun ActiveDirectory?
Câu trả lời:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Trả về:
John Doe
Một số thuộc tính tối nghĩa khác (chủ yếu) cũng có sẵn. Một vài cái hữu ích:
Thử:
[adsi]"WinNT://$dom/$usr,user" | select *
Tôi thích câu trả lời được chấp nhận, nhưng chỉ vì tôi muốn tự mình thử nó:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
trả về:
FullName
--------
TheCleaner
hoặc nếu bạn muốn không có thông tin tiêu đề và chỉ có kết quả:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Một lớp lót sử dụng Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Dựa trên nhận xét của bạn về câu trả lời được chấp nhận của Craig620,
Tôi có cần quyền quản trị miền để chạy lệnh này không? Hoặc chính người dùng tên miền có thể chạy lệnh này?
Có vẻ như bạn đang cố gắng tránh cài đặt các mô-đun powershell trên máy trạm của người dùng, vâng, nhưng cũng không, bạn không cần phải là quản trị viên tên miền để tìm kiếm tên của chính mình trong AD. Bạn có thể tra cứu khá nhiều thông tin xuất hiện trong GAL trong Outlook, bao gồm tên đầy đủ, với tư cách là người dùng chuẩn.
Bạn cũng có thể tra cứu tên đầy đủ của người khác dưới dạng người dùng chuẩn trong AD (sử dụng Get-WmiObject Win32_userAccount
, nếu bạn muốn tránh các mô-đun AD). Các tài khoản dịch vụ truy vấn AD (tốt, trước các tài khoản dịch vụ được quản lý ) thường là người dùng AD tiêu chuẩn, không có đặc quyền.
Sử dụng -match không phải là một lựa chọn tốt vì $ env: USERNAME của "ed" sẽ khớp với "fred" và "edith". Thay vào đó, sử dụng -eq cho một kết hợp chính xác và thêm vào miền nếu cần. Tôi sử dụng một vòng lặp foreach ở cuối để loại bỏ tất cả khoảng trắng dẫn đầu thay thế cho "select fullname | ft -HideTableHeaders" in dòng mới hàng đầu và dấu.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Nếu bạn luôn có .Net 3.5 trở lên (bạn nên có PowerShell v4.0 trở lên):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
Lớp đó cung cấp quyền truy cập rất dễ dàng vào tất cả các thuộc tính LDAP phổ biến, do đó bạn không cần tra cứu hai lần (một lần với WinNT và một lần nữa với LDAP) hoặc sử dụng [ADSISearcher]
để thực hiện tìm kiếm LDAP nếu bạn muốn một số thuộc tính mở rộng mà WinNT không triển khai .
Nếu bạn không muốn sử dụng mô-đun Active Directory, bạn không thể; trừ khi bạn muốn đi sâu hơn nữa và thực hiện truy vấn LDAP thực tế đối với bộ điều khiển miền.
Bất kỳ thông tin người dùng nào ngoài tên người dùng đều được lưu trữ trong Active Directory và nó phải được truy xuất tại đó.
[ADSI]
giao diện đã tồn tại lâu hơn nhiều so với các mô-đun AD và thực sự không quá phức tạp, như câu trả lời được chấp nhận cho thấy.