Wie bekomme ich den aktuellen Benutzernamen in Windows PowerShell?
Wie bekomme ich den aktuellen Benutzernamen in Windows PowerShell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bekomme ich den aktuellen Benutzernamen in Windows PowerShell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich es gefunden:
Gibt es auch:
$env:username
zum abrufen des Benutzernamens aus der entsprechenden Umgebungsvariablen.$env:USERNAME
kann durch den Benutzer verändert, aber das wird sich nicht täuschen lassen, das zu tun.$env:username
ist der einfachste Weg,Dachte ich, es wäre hilfreich, zusammenfassen und vergleichen Sie die gegebenen Antworten.
Wenn Sie möchten, um Zugriff auf die Umgebungsvariable:
(einfacher/kürzer/unvergessliche option)
[Environment]::UserName
-- @ThomasBratt$env:username
-- @Eoinwhoami
-- @galaktorWenn Sie möchten, um Zugriff auf die Windows-Zugriffstoken:
(mehr zuverlässige option)
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-- @MarkSeemannWenn Sie wollen, dass der name des angemeldeten Benutzers
(anstatt den Namen des Benutzers ausführen des PowerShell-Instanz)
$(Get-WMIObject -class Win32_ComputerSystem | select username).username
-- @TwonOfAn auf dieses andere forumVergleich
@Kevin Panko Kommentar @Mark Seemann Antwort befasst sich mit der Auswahl einer der Kategorien, die über die anderen:
Kurz, die Umgebungsvariable option ist kurz und bündig, und das Windows-Zugriffstoken option ist zuverlässiger.
Hatte, habe ich auf die Verwendung von @Mark Seemann Windows-Zugriffstoken Ansatz in einem PowerShell-Skript, daß ich aus einer C# - Anwendung mit dem Identitätswechsel.
Den C# - Anwendung ausgeführt wird, mit meinem Benutzer-Konto, und es läuft das PowerShell-Skript als Dienst-Konto. Aufgrund der Einschränkungen von der Art, wie ich bin, läuft das PowerShell-Skript aus C#, PowerShell-Instanz verwendet, mein Benutzer-Konto ' s environment-Variablen, obwohl es ausgeführt wird, wie das Dienst-Benutzerkonto.
In diesem setup die Umgebungsvariablen Optionen für die Rücksendung meiner account-Namen und die Windows-Zugriffstoken option gibt den Namen des Dienstkontos (was ich wollte), und der angemeldete Benutzer die option gibt meinen account-Namen.
Testen
Auch, wenn Sie vergleichen möchten, die Optionen selbst, hier ist ein Skript, das Sie verwenden können, um ein Skript ausführen als anderer Benutzer. Sie müssen das Cmdlet Get-Credential-cmdlet get-credential-Objekt, und führen Sie dann das Skript mit dem Skript ausgeführt werden als ein anderer Benutzer als argument 1, der credential-Objekt als argument, 2.
Verwendung:
Inhalt der Run-AsUser.ps1-Skript:
[Environment]::UserName
ist die beste option, wie es funktioniert Plattform-übergreifend.whoami
scheint auch zu arbeiten, sondern hängt von derwhoami
tool wird auf der Plattform zur Verfügung.$env:USERNAME
produziertSYSTEM
wenn ich ausführen als-administrator, während[Environment]::UserName]
ergibt mein Benutzername so oder so.Get-WmiObject
Methode funktioniert nicht mehr in pwsh. Auch versucht zu importieren Kompatibilität von Modul und dieMicrosoft.PowerShell.Management
hat das cmdlet. Irgendeine Idee was passiert?Ich möchte zu werfen, in der whoami Befehl, das ist im Grunde ein nettes alias für tun
%USERDOMAIN%\%USERNAME%
wie vorgeschlagen, andere Antworten.$env:USERNAME
kann durch den Benutzer verändert, aber das wird sich nicht täuschen lassen, das zu tun.[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
)whoami
ist eine ausführbare Datei. Es kann nicht entfernt werden aus der PowerShell. Es könnte aus Windows entfernt, aber es ist immer noch da, als der nicht-Nano-Windows Server 2012.[Environment]::UserName
gibt nur den Benutzer-Namen. E. g. bob[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
gibt der Benutzer name, Präfix von seiner Domäne, wo es angebracht ist. E. g. SOMEWHERENICE\bobNur aufbauend auf der Arbeit von anderen hier:
Habe ich verwendet
$env:username
in der Vergangenheit, aber ein Kollege wies darauf hin, es ist eine Umgebungsvariable und kann vom Benutzer geändert werden und daher, wenn Sie wirklich wollen, um den aktuellen Benutzernamen des Benutzers, Sie sollten nicht Vertrauen es.Ich würde upvote von Mark Seemann Antwort:
[System.Sicherheit.AUFTRAGGEBER.WindowsIdentity]::GetCurrent().Name
Aber ich darf nicht. Mit Mark ' s Antwort, wenn Sie brauchen nur den Benutzernamen, die Sie haben können, um zu analysieren, da auf meinem system, es gibt
hostname\username
und auf der Domäne beigetretenen Computer mit Domänen-accounts wird es wiederdomain\username
.Würde ich nicht verwenden
whoami.exe
da es nicht auf allen Versionen von Windows, und es ist ein Aufruf zu einem anderen binäre und kann einige Sicherheits-teams passt.[Environment]::UserName
ist weniger eingeben, unabhängig von$env:username
- und cross-Plattform: Sehen Sie pastebin.com/GsfR6HrpNun, dass PowerShell-Core (aka v6) wurde veröffentlicht, und die Leute können schreiben wollen, cross-Plattform-Skripte, viele der Antworten hier nicht auf etwas anderes als Windows.
[Environment]::UserName
scheint der beste Weg, um den aktuellen Benutzernamen auf allen Plattformen unterstützt von PowerShell-Core, wenn Sie nicht möchten, hinzufügen von Plattform-Erkennung und spezielle Gehäuse, um Ihren code.$username
Den zweiten Benutzername ist nur zur Anzeige Zwecke nur, wenn Sie kopieren und einfügen.
Wenn Sie ' re verwendet, um batch, können Sie rufen Sie
Diese im Grunde Stiehlt der Ausgabe von, was Sie erhalten würden, wenn Sie hatte eine batch-Datei mit nur "echo %username%".
$(...)
ist überflüssig:$a = cmd.exe /c echo %username%
funktioniert, b) es ist nicht tragbar, c) es nicht wirklich eine Antwort auf die Frage, wie es in powershell, antwortet er, wie es zu tun, in dos, und es ist besser zu geben, ein Mann eine Angelrute, als ihm einen Fisch, z.B.powershell puts environment variables into $env, so %username% = $env:username
.Ich sehe keine Add-Type basierte Beispiele. Hier ist man mit der GetUserName-direkt aus advapi32.dll.
UNLEN+1
, undUNLEN
256), es ignoriert alle Fehler, die zurückgegeben werden können, von GetUserName (durch es bewahrt GetLastError, ein guter Punkt), ist es nicht sauber den string buffer; und wohl auch einige andere. Und wie andere gesagt haben, sind die Kommentare schmerzlich vermisst.get-content "cm.txt"
write-host "entr file name"
$file = read-host
get-content $file
$content = get-content "cm.txt"
$content = get-content "cn.txt"
for each ($line in $count)
{write-host $line}
Finde ich am einfachsten zu verwenden: cd $home\Desktop\
nehmen Sie auf aktuellen Benutzer desktop
In meinem Fall habe ich benötigt, um den Benutzernamen zu aktivieren, das Skript den Pfad zu ändern, dh. c:\users\%username%. Ich brauchte, um das Skript zu starten, indem Sie den Pfad zu den desktop-Anwender. Ich war in der Lage, dies zu tun, mit Hilfe von oben und anderswo, durch die Verwendung der get-location-applet.
Möglicherweise haben Sie einen anderen oder sogar besseren Weg, es zu tun, aber das funktionierte für mich:
$Pfad = Get-Location
Set-Location $Pfad\Desktop
In meinem Fall habe ich benötigt, um den Benutzernamen zu aktivieren, das Skript den Pfad zu ändern, dh.
c:\users\%username%\
. Ich brauchte, um das Skript zu starten, indem Sie den Pfad zu den desktop-Anwender. Ich war in der Lage, dies zu tun, mit Hilfe von oben und anderswo, durch die Verwendung der get-location applet.Möglicherweise haben Sie einen anderen oder sogar besseren Weg, es zu tun, aber das funktionierte für mich:
Set-Location Desktop
. (Get-Location
nur gibt die aktuelle Lage, die implizite, für einSet-Location
mit einem relativen Pfad.)