Отримайте повне ім’я користувача поточного домену


23

Використовуючи PowerShell, як я можу отримати поточний вхід на повне ім’я користувача домену (не лише його ім’я користувача) без необхідності модуля ActiveDirectory?

Відповіді:


24
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname

Повернення:

John Doe

Також доступні деякі інші (переважно) незрозумілі властивості. Кілька корисних:

  • Homedrive UNC
  • Лист Homedrive
  • Опис
  • Сценарій входу

Спробуйте:

[adsi]"WinNT://$dom/$usr,user" | select *

3
Гарна відповідь. Звичайно, це буде запитуючи AD ... :)
Massimo

1
Чи потрібні права адміністратора домену для запуску цієї команди? Чи може сам користувач домену виконати цю команду?
Джонатан Рю

1
Будь-який користувач домену може запитувати AD для такої інформації.
Массімо

1
@Massimo Не будь-який користувач домену може запитувати AD для такої інформації. Користувачам не можна надати (або відмовити) дозвіл "Читати обмеження облікового запису" та не мати можливості запитувати будь-які дані з Active Directory
Ian Boyd

15

Мені подобається прийнята відповідь, але тільки тому, що я хотів це спробувати сам:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName

повертає:

FullName
--------
TheCleaner

або якщо ви хочете не мати інформацію про заголовок, а лише результат:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide

Я читаю це занадто швидко, він робить запит AD. Я вербально відкликаю свій голос.
MDMoore313

2
Але не потрібні модулі AD PS
squillman

3
@squillman це не робить, просто даючи Cleaner важкий час.
MDMoore313

Готча. Вибачте, мабуть, було без кофеїну ...
шквал

7

Один вкладиш, що використовує Powershell 3.0:

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders

3

На основі Вашого коментаря до прийнятої відповіді Craig620,

Чи потрібні права адміністратора домену для запуску цієї команди? Чи може сам користувач домену виконати цю команду?

Схоже, ви намагаєтеся уникати встановлення модулів shellhell на робочих станціях користувача, так, але також, ні, вам не потрібно бути адміністратором домену, щоб шукати власне ім’я в AD. Ви можете шукати майже будь-яку інформацію, яка з’являється в GAL в Outlook, включаючи повне ім’я, як звичайний користувач.

Ви також можете шукати повні імена інших людей як стандартного користувача в AD (використовуючи Get-WmiObject Win32_userAccount, якщо ви хочете уникати модулів AD). Облікові записи сервісів, які запитують AD (ну і до керованих облікових записів послуг ), як правило, є стандартними, непривілейованими користувачами AD.


1

Використання -match не є гарним вибором, оскільки $ env: USERNAME з "ed" буде відповідати "fred" та "edith". Замість цього використовуйте -eq для точної відповідності та додайте домен, якщо потрібно. Я використовую цикл foreach в кінці, щоб викреслити всі провідні проміжні пробіли як альтернативу "select fullname | ft -HideTableHeaders", який друкує провідний і кінцевий новий рядок.

gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}

1

Якщо у вас завжди .Net 3.5 або новішої версії (що вам слід з PowerShell v4.0 і вище):

Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;

Цей клас забезпечує дуже простий доступ до всіх загальних властивостей LDAP, тому вам не потрібно шукати двічі (один раз з WinNT і знову з LDAP) або використовувати [ADSISearcher]для пошуку LDAP, якщо ви хочете отримати деякі розширені властивості, які WinNT не реалізує .


0

Якщо ви не хочете використовувати модуль Active Directory, ви не можете; якщо ви не хочете заглибитись і виконати фактичний LDAP-запит проти контролера домену.

Будь-яка інформація про користувача, окрім імені користувача, зберігається в Active Directory, і її потрібно отримати там.


Але коли я відкриваю меню "Пуск", тут відображається повне ім'я користувача! Я маю на увазі, його треба десь зберігати?
Джонатан Рю

4
Так, він десь зберігається. Він зберігається в Active Directory.
Кетрін Вільярд

Можливо, він також зберігається / зберігається в кеш-реєстрі, але я не знайшов його легко і відмовився.
mfinni

1
Це правда, що він зберігається в AD, але [ADSI]інтерфейс значно довший, ніж модулі AD, і насправді не все так складно, як показує прийнята відповідь.
Мисливець Ейдсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.