Получить полное имя пользователя текущего домена
Используя PowerShell, как я могу получить полное имя пользователя текущего пользователя (не только его имя пользователя) без модуля ActiveDirectory?
6 ответов
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Возвращает:
John Doe
Некоторые другие (в основном) неясные свойства также доступны. Несколько полезных:
- Homedrive UNC
- Письмо Homedrive
- Описание
- Скрипт входа
Try:
[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. Вы можете найти практически любую информацию, которая отображается в GAL в Outlook, включая полное имя, в качестве стандартного пользователя.
Вы также можете найти полные имена других людей в качестве стандартного пользователя в AD (используя Get-WmiObject Win32_userAccount
, если вы хотите избежать AD модули). Учетные записи служб, которые запрашивают AD (ну, до управляемые учетные записи служб ) обычно являются стандартными, непривилегированными пользователями AD.
Использование -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, и ее необходимо найти там.