Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?
Die Antwort ist die Verwendung einer statischen .NET-Methode aus der Powershell heraus, die auch an anderer Stelle nützlich sein kann.
Wie kann ich den aktuellen Benutzernamen in Windows PowerShell abrufen?
Dies ist die sicherste Antwort, weil $env:USERNAME
kann vom Benutzer geändert werden, aber das wird nicht durch eine solche Änderung getäuscht.
@KevinPanko Stimmt, aber an dem Punkt, an dem man seinem Nutzer nicht mehr trauen kann, müssen andere, philosophischere Fragen gestellt werden ;-)
Diese Methode enthält den Domänennamen und den Benutzernamen. Besonders vorteilhaft, wenn Sie mehrere Domains im Einsatz haben.
Ich dachte, es wäre nützlich, die gegebenen Antworten zusammenzufassen und zu vergleichen.
(einfachere/kürzere/erinnerungswürdige Option)
[Environment]::UserName
-- @ThomasBratt$env:username
-- @Eoinwhoami
-- @galaktor(verlässlichere Option)
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-- @MarkSeemann(und nicht den Namen des Benutzers, der die PowerShell-Instanz ausführt)
$(Get-WMIObject -class Win32_ComputerSystem | select username).username
-- @TwonOfAn on dieses andere ForumIn dem Kommentar von @Kevin Panko zur Antwort von @Mark Seemann geht es darum, eine der Kategorien der anderen vorzuziehen:
[Der Ansatz mit dem Windows-Zugriffstoken ist die sicherste Lösung, da $env:USERNAME vom Benutzer geändert werden kann, was aber nicht zu einer Täuschung führt.
Kurz gesagt, die Option "Umgebungsvariable" ist prägnanter, und die Option "Windows-Zugriffstoken" ist zuverlässiger.
Ich musste den Windows-Zugriffstoken-Ansatz von @Mark Seemann in einem PowerShell-Skript verwenden, das ich aus einer C#-Anwendung mit Impersonation ausgeführt habe.
Die C#-Anwendung wird unter meinem Benutzerkonto ausgeführt, und das PowerShell-Skript wird unter einem Dienstkonto ausgeführt. Aufgrund einer Einschränkung der Art und Weise, wie ich das PowerShell-Skript von C# aus ausführe, verwendet die PowerShell-Instanz die Umgebungsvariablen meines Benutzerkontos, obwohl sie als Benutzer des Dienstkontos ausgeführt wird.
Bei dieser Konfiguration geben die Optionen für die Umgebungsvariable meinen Kontonamen zurück, die Option für das Windows-Zugriffstoken gibt den Namen des Dienstkontos zurück (was ich wollte), und die Option für den angemeldeten Benutzer gibt meinen Kontonamen zurück.
Wenn Sie die Optionen selbst vergleichen möchten, finden Sie hier ein Skript, mit dem Sie ein Skript als anderer Benutzer ausführen können. Sie müssen das Cmdlet "Get-Credential" verwenden, um ein Anmeldeinformationsobjekt abzurufen, und dann dieses Skript mit dem Skript für die Ausführung als anderer Benutzer als Argument 1 und dem Anmeldeinformationsobjekt als Argument 2 ausführen.
Verwendung:
$cred = Get-Credential UserTo.RunAs
Run-AsUser.ps1 "whoami; pause" $cred
Run-AsUser.ps1 "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name; pause" $cred
Inhalt des Skripts Run-AsUser.ps1:
param(
[Parameter(Mandatory=$true)]
[string]$script,
[Parameter(Mandatory=$true)]
[System.Management.Automation.PsCredential]$cred
)
Start-Process -Credential $cred -FilePath 'powershell.exe' -ArgumentList 'noprofile','-Command',"$script"
Für PowerShell 6 unter Mac OS X und Linux, [Environment]::UserName
ist die beste Option, da sie plattformübergreifend funktioniert. whoami
scheint auch zu funktionieren, hängt aber von der whoami
das auf der Plattform verfügbar ist.
Für Powershell 6 unter Windows, $env:USERNAME
produziert SYSTEM
es sei denn, ich führe als Administrator aus, während [Environment]::UserName]
ergibt so oder so meinen Benutzernamen.
Es scheint, dass die Get-WmiObject
Methode funktioniert in pwsh nicht mehr. Ich habe sogar versucht, das Kompatibilitätsmodul zu importieren und die Microsoft.PowerShell.Management
die das Cmdlet enthält. Haben Sie eine Idee, was passiert ist?
Ich würde gerne die whoami Befehl, der im Grunde ein schöner Alias für die Ausführung von %USERDOMAIN%\%USERNAME%
wie in anderen Antworten vorgeschlagen.
Write-Host "current user:"
Write-Host $(whoami)
Bei mir funktioniert es mit PS Version 2. Heißt das, dass es auf PS3 nicht mehr funktioniert? C:\>powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten. PS C:\> whoami mydomain \myusername
$env:USERNAME
kann vom Benutzer geändert werden, aber das wird nicht durch eine solche Änderung getäuscht.
Whoami gewinnt für die interaktive Nutzung. Es ist kurz genug, dass ich mich daran erinnern kann, wie man es tippt, ohne SO zu konsultieren :-)
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.