Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получить имя текущего пользователя, запуская cmd от другого пользователя. (http://forum.oszone.net/showthread.php?t=338449)

freegod 27-12-2018 07:45 2848499

Получить имя текущего пользователя, запуская cmd от другого пользователя.
 
Доброго дня.
Такая задача:
Есть машины в домене, есть bat файл с определённым набором команд, запускаемый от имени пользователя с правами администратора, необходимо определить имя пользователя от которого выполнен вход на машину, для того что бы попасть в его профиль на данной машине и, возможно, выполнить некоторые действия от имени этого пользователя.
Фактически задача сводится к тому что нужно поместить имя залогиневшегося пользователя в переменную, при условии что скрипт запущен от другого пользователя.
Мне на ум приходит только определить пользователя от которого запущен процесс explorer.exe, но как это реализовать, ума не приложу.

Iska 27-12-2018 17:02 2848609

freegod, попробуйте передавать пакетному файлу имя пользователя посредством:
Код:

SomeBatch.cmd "%UserDomain%\%UserName%"
а в самом пакетном файле просто обрабатывайте переданный параметр. Не?

Цитата:

Цитата freegod
необходимо определить имя пользователя от которого выполнен вход на машину, »

Строго говоря, таких пользователей может быть и несколько.

freegod 28-12-2018 07:23 2848682

Iska, К сожалению, так я получу имя пользователя от которого запущен пакетный файл, а мне нужно получить имя пользователя от которого запущен рабочий стол.
Объясняю ситуацию:
Есть более 1000 машин в домене, на которые я, в связи со своими служебными обязанностями, подключаюсь и выполняю некоторый пакетный файл от своей учётной записи, с помощью скрипта, помимо действий выполняющихся только от имени администратора, мне необходимо попадать в папку пользователя работающего за этим ПК что бы выполнить определённый набор действий с файлами. Каждый раз задавать имя пользователя в ручную очень не удобно, поэтому хотелось бы получить имя пользователя который физически выполнил вход на машину.

Kazun 28-12-2018 08:44 2848686

Код:

wmic path win32_computersystem get username | find "\"
quser /?
qwinsta /?

Iska 28-12-2018 17:28 2848783

Цитата:

Цитата Kazun
wmic path win32_computersystem get username | find "\" »

Покажет последнего зарегистрировавшегося пользователя. А вот остальное вполне годится, там есть на что ориентироваться (console и т.п.).


Цитата:

Цитата freegod
подключаюсь и выполняю »

Как именно?

freegod 29-12-2018 15:23 2848971

Цитата:

Цитата Iska
подключаюсь и выполняю » »

С помощью Radmin.
Да, quser и qwinsta подходят.
Подскажите как вырезать из выхлопа qwinsta | find "console" имя пользователя и поместить в переменную?

Iska 29-12-2018 16:27 2848979

Цитата:

Цитата freegod
Подскажите как вырезать из выхлопа qwinsta | find "console" имя пользователя и поместить в переменную? »

Например, так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2 delims= " %%i in (`qwinsta.exe^|find.exe /i "console"`) do set sUserName=%%i
if defined sUserName echo [%sUserName%]

endlocal
exit /b 0


alpap 30-12-2018 02:33 2849038

Цитата:

Цитата freegod
Подскажите как вырезать из ... имя пользователя и поместить в переменную? »

почему именно оттуда, из net user можно тоже и еще надо учесть что имя юзера может иметь пробел
Код:

@echo off
setlocal enabledelayedexpansion
 for /f "delims=" %%a in ('net user^|find "%UserName%"') do (
  set "v=%%a"& set s=
  for %%s in (!v:%UserName%^="%UserName%"!) do if not defined s set "s=%%~s"
 )
 echo %s%
endlocal
pause


freegod 15-01-2019 11:52 2852335

Iska, Спасибо, ваш код работает. Это то что мне нужно.
alpap, К сожалению, ваш способ не работает, net user выдаёт только имена локальных пользователей, а не доменных.

Iska 15-01-2019 17:12 2852403

Цитата:

Цитата freegod
net user выдаёт только имена локальных пользователей, а не доменных. »

А так (спрашиваю, а не утверждаю, поскольку проверять нынче не на чем):
Код:

net.exe user /domain
?

freegod 16-01-2019 07:59 2852572

Цитата:

Цитата Iska
net.exe user /domain »

Так можно получить список всех пользователей домена.
Собственно при выполнении, спустя пару минут контроллер домена показал мне список из нескольких десятков тысяч пользователей, данный список даже не влазит в консоль, ну и не подходит для моих целей.
По моему, команда net user не даёт информации о залогинившихся пользователях на машине.

Iska 16-01-2019 19:10 2852712

Цитата:

Цитата freegod
ак можно получить список всех пользователей домена.
Собственно при выполнении, спустя пару минут контроллер домена показал мне список из нескольких десятков тысяч пользователей, данный список даже не влазит в консоль, »

Так и должно быть :).


Время: 16:19.

Время: 16:19.
© OSzone.net 2001-