512 Stimmen

Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?

Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?

40voto

WaffleSouffle Punkte 3153

[Environment]::UserName gibt nur den Benutzernamen zurück. z.B. bob [System.Security.Principal.WindowsIdentity]::GetCurrent().Name gibt den Benutzernamen zurück, ggf. mit vorangestelltem Domainnamen. z.B. SOMEWHERENICE \bob

24voto

Edouard Poor Punkte 478

Nun, da PowerShell-Kern (auch bekannt als v6) veröffentlicht wurde und die Leute vielleicht plattformübergreifende Skripte schreiben wollen, werden viele der Antworten hier nur unter Windows funktionieren.

[Environment]::UserName scheint der beste Weg zu sein, um den aktuellen Benutzernamen auf allen von PowerShell Core unterstützten Plattformen zu erhalten, wenn Sie keine Plattformerkennung und kein spezielles Gehäuse zu Ihrem Code hinzufügen möchten.

18voto

Dave Hull Punkte 171

Ich habe verwendet $env:username in der Vergangenheit, aber ein Kollege wies darauf hin, dass es sich um eine Umgebungsvariable handelt, die vom Benutzer geändert werden kann, so dass man sich nicht darauf verlassen sollte, wenn man wirklich den Benutzernamen des aktuellen Benutzers erfahren will.

Ich würde die Antwort von Mark Seemann hochstufen: [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

Aber das darf ich nicht. Mit Marks Antwort, wenn Sie nur den Benutzernamen benötigen, müssen Sie ihn möglicherweise auswerten, da er auf meinem System Folgendes zurückgibt hostname\username und auf domänenverbundenen Rechnern mit Domänenkonten wird zurückgegeben domain\username .

Ich würde nicht verwenden whoami.exe da es nicht in allen Windows-Versionen vorhanden ist, und es ist ein Aufruf zu einer anderen Binärdatei und kann einigen Sicherheitsteams Probleme bereiten.

2 Stimmen

Da der OP nach der Windows-Powershell gefragt hat, ist das zwar richtig, aber [Environment]::UserName ist weniger typisierend, unabhängig von $env:username und plattformübergreifend: Siehe pastebin.com/GsfR6Hrp

11voto

Stef Punkte 101

Ich baue nur auf der Arbeit der anderen hier auf:

[String] ${stUserDomain},[String]  ${stUserAccount} = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")

8voto

clayton.nichols Punkte 71
$username=( ( Get-WMIObject -class Win32_ComputerSystem | Select-Object -ExpandProperty username ) -split '\\' )[1]

$username

En zweite Nutzername dient nur zu Anzeigezwecken, wenn Sie sie kopieren und einfügen.

0 Stimmen

$fullname=Get-WMIObject -class Win32_ComputerSystem | Select-Object -ExpandProperty username $username=$fullname.Replace("DOMAIN\","") $username

1 Stimmen

Dies funktioniert am besten, wenn der Benutzer auf dem Computer angemeldet sein soll, nicht der Benutzer, der die Powershell-Sitzung ausführt. Wenn Sie ein Skript als System ausführen und wissen wollen, welcher Benutzer auf dem Computer angemeldet ist, helfen die Umgebungsvariablen nicht.

0 Stimmen

Meine Untersuchungen haben ergeben, dass es besser ist, die Get-CIMInstance 代わりに Get-WMIObject . Bitte lesen Sie den Artikel aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X