Используя PowerShell, как я могу получить полное имя текущего пользователя домена (не только его имя пользователя) без необходимости использования модуля ActiveDirectory?
Используя PowerShell, как я могу получить полное имя текущего пользователя домена (не только его имя пользователя) без необходимости использования модуля ActiveDirectory?
Ответы:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Возвращает:
John Doe
Некоторые другие (в основном) неясные свойства также доступны. Несколько полезных:
Пытаться:
[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}
Если у вас всегда есть .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 не реализует ,
Если вы не хотите использовать модуль Active Directory, вы не можете; если вы не хотите пойти еще глубже и выполнить фактический запрос LDAP к контроллеру домена.
Любая пользовательская информация, кроме имени пользователя, хранится в Active Directory, и ее необходимо найти там.
[ADSI]
интерфейс существует намного дольше, чем модули AD, и на самом деле не все так сложно, как показывает принятый ответ.