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

23

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

Джонатан Риу
источник

Ответы:

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

Возвращает:

John Doe

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

  • Homedrive UNC
  • Homedrive Letter
  • Описание
  • Скрипт входа

Пытаться:

[adsi]"WinNT://$dom/$usr,user" | select *
Clayton
источник
3
Хороший ответ. Конечно, это будет запрашивая AD ... :)
Massimo
1
Нужны ли мне права администратора домена для запуска этой команды? Или может сам пользователь домена может запустить эту команду?
Джонатан Риу
1
Любой пользователь домена может запросить AD для такого рода информации.
Массимо
1
@Massimo Ни один пользователь домена не может запрашивать AD для такого рода информации. Пользователям не может быть предоставлено (или запрещено) разрешение «Чтение ограничений учетной записи», и они не смогут запрашивать какие-либо данные из Active Directory
Иан Бойд,
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 это не так, просто трудно очистить.
MDMoore313
Попался. Извините, должно быть, был без кофеина ...
squillman
7

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

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
MDMoore313
источник
3

На основании вашего комментария на принятый ответ Craig620,

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

Похоже, вы пытаетесь избежать установки модулей powershell на пользовательских рабочих станциях, да, но также, нет, вам не нужно быть администратором домена, чтобы искать свое собственное имя в 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, и ее необходимо найти там.

Massimo
источник
Но когда я открываю меню «Пуск», полное имя пользователя отображается здесь! Я имею в виду, это должно храниться где-то?
Джонатан Риу
4
Да, это где-то хранится. Он хранится в Active Directory.
Кэтрин Вилляр
Вероятно, он также хранится / кэшируется в реестре, но я не нашел его легко и сдался.
mfinni
1
Это правда, что он хранится в AD, но [ADSI]интерфейс существует намного дольше, чем модули AD, и на самом деле не все так сложно, как показывает принятый ответ.
Хантер Эйдсон