Czy podczas uruchamiania skryptu wiersza poleceń można uzyskać nazwę bieżącego użytkownika?
windows
batch-file
Geo
źródło
źródło
Odpowiedzi:
Możesz użyć zmiennej nazwy użytkownika:
%USERNAME%
źródło
Nazwa Użytkownika:
Nazwa domeny:
Pełną listę zmiennych środowiskowych można uzyskać, uruchamiając polecenie
set
z wiersza polecenia.źródło
Po prostu użyj tego polecenia w wierszu polecenia
źródło
whoami
, dostanędesktop-machine\bballdave025
. Są dwie części, rozpatrywane przez: 1)echo %USERNAME%
, wynikbballdave025
; 2)echo %USERDOMAIN%
, wynikDESKTOP-MACHINE
. Wydaje mi się, że można powiedzieć, że „pełna nazwa użytkownika” jest dostępna za pośrednictwemecho %USERDOMAIN%\%USERNAME%
wyniku (ten wynikDESKTOP-MACHINE\bballdave025
,, odpowiada temu zwhoami
, ignorując wielkość liter), a nawet przezecho %USERNAME%@%USERDOMAIN%
wynikbballdave025@DESKTOP-MACHINE
. Wszystko zależy od tego, czego potrzebuje użytkownik (dla nas OP) , czyli czy ważna jest domena.Powinien być w
%USERNAME%
. Oczywiście można to łatwo sfałszować, więc nie należy na tym polegać w celu zapewnienia bezpieczeństwa.Przydatna wskazówka: wpisanie
set
wiersza polecenia spowoduje wyświetlenie wszystkich zmiennych środowiskowych.źródło
%USERNAME%
to poprawna odpowiedź w środowisku wsadowym i innych w środowiskach Windows.Inną opcją jest użycie
%USERPROFILE%
do uzyskania ścieżki użytkownika, na przykładC:\Users\username
.źródło
Odpowiedź zależy od tego, w jakim języku „skryptu wiersza poleceń” się znajdujesz.
Cmd
W starym
cmd.exe
wierszu polecenia lub w skrypcie.bat
lub.cmd
możesz użyć następujących poleceń :%USERNAME%
- Pobiera tylko nazwę użytkownika.%USERDOMAIN%
- Pobiera domenę użytkownika.PowerShell
W wierszu polecenia programu PowerShell
.ps1
lub.psm1
skrypcie lub można użyć następujących poleceń :[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
- Podaje w pełni kwalifikowaną nazwę użytkownika (np. Domena \ nazwa użytkownika). Jest to również najbezpieczniejsza metoda, ponieważ nie może być zastąpiona przez użytkownika, tak jak inne$Env
zmienne poniżej.$Env:Username
- Pobiera tylko nazwę użytkownika.$Env:UserDomain
- Pobiera domenę użytkownika.$Env:ComputerName
- Pobiera nazwę komputera.źródło
% USERNAME% otrzyma nazwę użytkownika aktualnie uruchomionego procesu. W zależności od tego, jak uruchamiasz plik wsadowy, nie musi to być takie samo, jak nazwa bieżącego użytkownika. Na przykład możesz uruchamiać plik wsadowy za pomocą zaplanowanego zadania, z usługi itp.
Oto bardziej pewny sposób uzyskania nazwy użytkownika aktualnie zalogowanego użytkownika poprzez zeskrobanie nazwy użytkownika, który uruchomił zadanie explorer.exe:
źródło
Używam tej metody do pisania plików wsadowych do testów.
Ponieważ musisz podać hasło w postaci zwykłego tekstu, jeśli wymagane jest uwierzytelnienie, użyję go tylko w całkowicie prywatnym środowisku, w którym inni użytkownicy nie mogą go wyświetlić lub jeśli użytkownik widzący hasło nie poniósłby żadnych konsekwencji.
Mam nadzieję, że to komuś pomoże.
źródło
Zawsze denerwowało mnie to, że Windows nie ma kilku bardziej użytecznych małych narzędzi do skryptowania Uniksa, takich jak who / whoami , sed i AWK . W każdym razie, jeśli chcesz czegoś niezawodnego, pobierz Visual Studio Express i skompiluj następujące elementy:
I po prostu użyj tego w swoim pliku wsadowym.
źródło
net config Workstation | find "User name"
whoami
jest dostępny począwszy od systemu Windows Vista.W większości przypadków zmienna% USERNAME% będzie taka, jak chcesz.
Jeśli jednak używasz powłoki cmd z podwyższonym poziomem uprawnień,% USERNAME% zgłosi nazwę administratora zamiast własnej nazwy użytkownika. Jeśli chcesz poznać to drugie, uruchom:
źródło
Oto główna różnica między zmienną użytkownika a poleceniem whoami:
źródło
W standardowym kontekście każdy podłączony użytkownik posiada proces explorer.exe: Polecenie [lista zadań / V | znajdź "eksplorator"] zwraca wiersz zawierający właściciela procesu explorer.exe, z dostosowanym wyrażeniem regularnym można uzyskać wymagane wartość. Działa to również doskonale pod Windows 7.
W rzadkich przypadkach program explorer.exe zostaje zastąpiony innym programem, filtr wyszukiwania można dostosować do tego przypadku. Jeśli polecenie zwróci pusty wiersz, prawdopodobnie żaden użytkownik nie jest zalogowany. W systemie Windows 7 można również uruchomić [sesję zapytań | znajdź ">"].
źródło
O ile uważam, że odpowiedź BlueBearr jest najlepsza (póki ja uruchamiam skrypt wsadowy z np. Prawami SYSTEMowymi) to muszę coś do tego dodać. Ponieważ w mojej wersji językowej Windows (polskiej) wiersz, który ma być przechwycony przez "%% a %% b" == "Nazwa użytkownika:" jest NAPRAWDĘ SKOMPLIKOWANY (zawiera kilka znaków diakrytycznych w moim języku) pomijam pierwsze 7 wierszy i działają 8.
źródło