Назад | Перейти на главную страницу

Получить полное имя текущего пользователя домена

Как с помощью PowerShell получить полное имя текущего пользователя домена (а не только его имя пользователя) без модуля ActiveDirectory?

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

Возврат:

John Doe

Также доступны некоторые другие (в основном) малоизвестные свойства. Несколько полезных:

  • Homedrive UNC
  • Письмо о Homedrive
  • Описание
  • Скрипт входа в систему

Пытаться:

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

Мне нравится принятый ответ, но просто потому, что я сам хотел попробовать:

$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

Один лайнер с использованием Powershell 3.0:

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

Основываясь на вашем комментарии к принятому ответу Craig620,

Нужны ли мне права администратора домена для выполнения этой команды? Или может сам домен-пользователь может запустить эту команду?

Похоже, вы пытаетесь избежать установки модулей PowerShell на рабочие станции пользователей, да, но также, нет, вам не нужно быть администратором домена, чтобы искать свое имя в AD. Вы можете найти практически любую информацию, которая появляется в глобальном списке адресов в Outlook, включая полное имя, как обычный пользователь.

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

Если у вас всегда есть .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 не реализует.

Использование -match не является хорошим выбором, потому что $ env: USERNAME из «ed» будет соответствовать «fred» и «edith». Вместо этого используйте -eq для точного совпадения и при необходимости добавьте домен. Я использую цикл foreach в конце, чтобы убрать все начальные и завершающие пробелы, в качестве альтернативы «select fullname | ft -HideTableHeaders», который печатает начальную и конечную новую строку.

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

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

Любая информация о пользователе, кроме имени пользователя, хранится в Active Directory и должна быть там извлечена.

([adsi]"LDAP://$(whoami /fqdn)").displayName

Вы можете получить огромное количество информации, используя этот очень простой инструмент. Проверять, выписываться

([adsi]"LDAP://$(whoami /fqdn)") | fl *