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


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 *

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

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, и ее необходимо найти там.


Но когда я открываю меню «Пуск», полное имя пользователя отображается здесь! Я имею в виду, это должно храниться где-то?
Джонатан Риу

4
Да, это где-то хранится. Он хранится в Active Directory.
Кэтрин Вилляр

Вероятно, он также хранится / кэшируется в реестре, но я не нашел его легко и сдался.
mfinni

1
Это правда, что он хранится в AD, но [ADSI]интерфейс существует намного дольше, чем модули AD, и на самом деле не все так сложно, как показывает принятый ответ.
Хантер Эйдсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.