Wie kann ich mit PowerShell den vollständigen Namen des aktuell angemeldeten Domänenbenutzers (nicht nur den Benutzernamen) abrufen, ohne das ActiveDirectory-Modul zu benötigen?
Wie kann ich mit PowerShell den vollständigen Namen des aktuell angemeldeten Domänenbenutzers (nicht nur den Benutzernamen) abrufen, ohne das ActiveDirectory-Modul zu benötigen?
Antworten:
$dom = $env:userdomain
$usr = $env:username
([adsi]"WinNT://$dom/$usr,user").fullname
Kehrt zurück:
John Doe
Einige andere (meistens) undurchsichtige Eigenschaften sind ebenfalls verfügbar. Einige nützliche:
Versuchen:
[adsi]"WinNT://$dom/$usr,user" | select *
Ich mag die akzeptierte Antwort, aber nur, weil ich das selbst ausprobieren wollte:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName
kehrt zurück:
FullName
--------
TheCleaner
oder wenn Sie nicht die Header-Informationen und nur das Ergebnis haben möchten:
$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
Ein Liner mit Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
Basierend auf Ihrem Kommentar zur akzeptierten Antwort von Craig620,
Benötige ich Domänenadministratorrechte, um diesen Befehl auszuführen? Oder kann der Domänenbenutzer selbst diesen Befehl ausführen?
Es hört sich so an, als würden Sie versuchen, die Installation von Powershell-Modulen auf Benutzerarbeitsstationen zu vermeiden. Ja, aber Sie müssen auch kein Domänenadministrator sein, um Ihren eigenen Namen in AD nachzuschlagen. Sie können so ziemlich alle Informationen nachschlagen, die in der GAL in Outlook angezeigt werden, einschließlich des vollständigen Namens als Standardbenutzer.
Sie können auch die vollständigen Namen anderer Personen als Standardbenutzer in AD nachschlagen (mit Get-WmiObject Win32_userAccount
, wenn Sie die AD-Module vermeiden möchten). Dienstkonten , die AD abfragen (also vor verwalteten Dienstkonten ), sind in der Regel standardmäßige, nicht privilegierte AD-Benutzer.
Die Verwendung von -match ist keine gute Wahl, da ein $ env: USERNAME von "ed" mit "fred" und "edith" übereinstimmt. Verwenden Sie stattdessen -eq für eine genaue Übereinstimmung und fügen Sie bei Bedarf die Domäne hinzu. Ich benutze eine foreach-Schleife am Ende, um alle führenden und nachfolgenden Leerzeichen als Alternative zu "select fullname | ft -HideTableHeaders" zu entfernen, wodurch eine führende und nachfolgende Zeile ausgegeben wird.
gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
Wenn Sie immer .Net 3.5 oder höher haben (was Sie mit PowerShell v4.0 und höher tun sollten):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement;
$DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName;
Diese Klasse bietet sehr einfachen Zugriff auf alle gängigen LDAP-Eigenschaften, sodass Sie nicht zweimal nachschlagen müssen (einmal mit WinNT und erneut mit LDAP) oder [ADSISearcher]
eine LDAP-Suche durchführen müssen, wenn Sie einige erweiterte Eigenschaften wünschen, die WinNT nicht implementiert .
Wenn Sie das Active Directory-Modul nicht verwenden möchten, ist dies nicht möglich. es sei denn, Sie möchten noch tiefer gehen und eine tatsächliche LDAP-Abfrage für einen Domänencontroller ausführen.
Andere Benutzerinformationen als der Benutzername werden in Active Directory gespeichert und müssen dort abgerufen werden.
[ADSI]
Benutzeroberfläche gibt es schon viel länger als die AD-Module und es ist wirklich nicht allzu kompliziert, wie die akzeptierte Antwort zeigt.