Jak uzyskać bieżącą nazwę użytkownika w Windows Powershell?
Jak uzyskać bieżącą nazwę użytkownika w Windows Powershell?
12 answers
Znaleziono:
$env:UserName
Istnieje również:
$env:UserDomain
$env:ComputerName
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-21 02:40:44
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-18 11:54:21
$env:username
jest najprostszym sposobem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-25 07:52:51
Pomyślałem, że warto byłoby podsumować i porównać podane odpowiedzi.
Jeśli chcesz uzyskać dostęp do zmienna środowiskowa:
(łatwiejsza/krótsza / niezapomniana opcja)
-
[Environment]::UserName
-- @ThomasBratt -
$env:username
-- @Eoin -
whoami
-- @galaktor
Jeśli chcesz uzyskać dostęp do token dostępu do systemu windows:
(bardziej niezawodna opcja)
-
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-- @MarkSeemann
Jeśli chcesz podać nazwę zalogowanego użytkownika
Nie jest to jednak tylko nazwa użytkownika, który uruchomił instancję PowerShell.]}-
$(Get-WMIObject -class Win32_ComputerSystem | select username).username
-- @TwonOfAn na to inne forum
Porównanie
Komentarz Kevina Panko do odpowiedzi Marka Seemanna dotyczy wyboru jednej z kategorii nad drugą:
[the Windows access token approach] jest najbezpieczniejszą odpowiedzią, ponieważ $env: USERNAME może być zmieniane przez użytkownika, ale nie da się tego oszukać.
W skrócie, opcja zmiennej środowiskowej jest bardziej zwięzła, a opcja tokenu windows access jest bardziej niezawodna.
Musiałem użyć podejścia windows access token @ Mark Seemann w skrypcie PowerShell, który uruchamiałem z aplikacji C# z podszywaniem się. Aplikacja C# jest uruchamiana z moim kontem użytkownika i uruchamia skrypt powershell jako konto usługowe. Z powodu ograniczenia w sposób, w jaki uruchamiam skrypt PowerShell z C#, instancja PowerShell wykorzystuje zmienne środowiskowe mojego konta użytkownika, nawet jeśli jest uruchamiana jako użytkownik konta usługi. W tej konfiguracji opcje zmiennej środowiskowej zwracają nazwę mojego konta, a token dostępu do systemu Windows zwraca nazwę konta usługi (co chciałem), a opcja zalogowany użytkownik zwraca nazwę mojego konta.
Testowanie
Również, jeśli chcesz porównać opcje samodzielnie, oto skrypt możesz użyć do uruchomienia skryptu jako inny użytkownik. Musisz użyć polecenia Get-Credential cmdlet, aby uzyskać obiekt credential, a następnie uruchomić ten skrypt ze skryptem, aby uruchomić jako inny użytkownik jako argument 1, A obiekt credential jako argument 2.
Użycie:
$cred = Get-Credential UserTo.RunAs
Run-AsUser.ps1 "whoami; pause" $cred
Run-AsUser.ps1 "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name; pause" $cred
Zawartość skryptu 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"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 20:01:21
Chciałbym dorzucić komendę whoami , która w zasadzie jest miłym aliasem do wykonywania {[1] } zgodnie z propozycją w innych odpowiedziach.
Write-Host "current user:"
Write-Host $(whoami)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 09:08:35
[Environment]::UserName
zwraca tylko nazwę użytkownika. Np. bob
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
zwraca nazwę użytkownika, poprzedzoną w stosownych przypadkach jego domeną. Np. Somewhere\bob
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 12:19:30
Używałem $env: username w przeszłości, ale kolega zauważył, że jest to zmienna środowiskowa i może być zmieniona przez użytkownika i dlatego, jeśli naprawdę chcesz uzyskać nazwę użytkownika bieżącego użytkownika, nie powinieneś jej ufać.
Podniosłbym odpowiedź Marka Seemanna:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
Ale nie wolno mi. Z odpowiedzią Marka, jeśli potrzebujesz tylko nazwy użytkownika, być może będziesz musiał ją przeanalizować, ponieważ w moim systemie zwraca nazwę hosta\nazwa użytkownika, a na maszynach połączonych z domeną z kontami domeny zwróci nazwę domeny\username.
Nie użyłbym whoami.exe ponieważ nie jest obecny we wszystkich wersjach systemu Windows i jest wywołaniem do innego pliku binarnego i może dać pewne dopasowania zespołom bezpieczeństwa.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 17:21:08
Po prostu opierając się na pracy innych tutaj:
[String] ${stUserDomain},[String] ${stUserAccount} = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")
I dziękuję za informacje, ponieważ lubię pobierać dane prosto i z autorytatywnego źródła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 17:00:46
Teraz, gdy Powershell Core (aka v6) został wydany, a ludzie mogą chcieć pisać skrypty wieloplatformowe, wiele odpowiedzi tutaj nie będzie działać na niczym innym niż Windows.
[Environment]::UserName
wydaje się być najlepszym sposobem uzyskania bieżącej nazwy użytkownika na wszystkich platformach obsługiwanych przez PowerShell Core, jeśli nie chcesz dodawać wykrywania platformy i specjalnej obudowy do kodu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 20:37:59
Nie widziałem żadnych przykładów opartych na add-type, tutaj jest jeden z wykorzystaniem GetUserName bezpośrednio z advapi32.dll.
$sig = @'
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool GetUserName(System.Text.StringBuilder sb, ref Int32 length);
'@
Add-Type -MemberDefinition $sig -Namespace Advapi32 -Name Util
$size = 64
$str = New-Object System.Text.StringBuilder -ArgumentList $size
[Advapi32.util]::GetUserName($str,[ref]$size) |Out-Null
$str.ToString()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-03 20:09:19
Jeśli jesteś przyzwyczajony do partii, możesz zadzwonić
$user=$(cmd.exe /c echo %username%)
To w zasadzie kradnie wynik z tego, co otrzymałbyś, gdybyś miał plik wsadowy z " echo % username%".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 21:37:03
W moim przypadku musiałem pobrać nazwę użytkownika, aby umożliwić skryptowi zmianę ścieżki, np. c:\users\%username%\
. Musiałem uruchomić skrypt zmieniając ścieżkę do pulpitu użytkownika. Udało mi się to zrobić, z Pomocą z góry i z innych stron, używając apletu get-location.
Możesz mieć inny, a nawet lepszy sposób na to, ale to mi pomogło:
$Path = Get-Location
Set-Location $Path\Desktop
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-30 17:57:55