Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16

Как узнать имя пользователя, который запустил данный командный файл от имени другого пользователя?

17.09.2021, 20:52. Показов 2386. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос задаю в ветке PowerShell, т.к. скорее его средствами, нежели средствами одного только командного файла можно нормально реализовать желаемое.

Есть батник, который может запустить любой удалённый пользователь в своей rdp-сессии, причём запускать его нужно вручную и исключительно от имени администратора. Код этого батника, для своей дальнейшей работы, должен определять имя пользователя, который инициировал его запуск от имени другого пользователя (в данном случае - от администратора).

Это легко реализовать через парсинг qwinsta, найдя там активную сессию. Но в случае, если с системой может работать одновременно несколько активных rdp-пользователей данный трюк не прокатит.

Как быть?

PS: Подразумевается, что сабж будет решаться путём вставки нужных команд PowerShell в тело командного файла.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2021, 20:52
Ответы с готовыми решениями:

Написать командный файл, который запрашивает у пользователя имя и пароль
Написать командный файл, который: • запрашивает у пользователя имя и пароль • если имя пользователя совпадает с паролем, выводит строку...

Как узнать имя пользователя который изменил файл последним?
Как узнать имя пользователя который изменил файл последним? Собственно сабж. Копал MSDN FileInfo и File нарыл только FileAcces, но...

Как запустить процесс, который будет запускать файл сценария PowerShell от имени другого пользователя?
подскажите пожалуйста как мне запустить процесс, который будет ранить скрит под другим пользователем $credential = Get-Credential ...

13
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.09.2021, 23:51
Цитата Сообщение от sMario Посмотреть сообщение
если с системой может работать одновременно несколько активных rdp-пользователей данный трюк не прокатит
журнал - время запуска этого файла(Имя пользователя)

Добавлено через 2 часа 41 минуту
Цитата Сообщение от sMario Посмотреть сообщение
вставки нужных команд ... в тело командного файла
первые три работают как в cmd так и в PowerShell
PowerShell
1
2
3
4
tasklist /V /FI "ImageName eq explorer.exe" /FO List
quser
qwinsta
gcim Win32_ComputerSystem -Computer "..."|select UserName
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.09.2021, 00:16
Цитата Сообщение от sMario Посмотреть сообщение
данный трюк не прокатит
как и говорил выше - сопоставить время запуска к имени запустившего
интересно другое, а чем чревато, какие последствия в случае провала определения? Может с конца проблемы зайти?
0
6970 / 2864 / 1100
Регистрация: 06.06.2017
Сообщений: 9,720
19.09.2021, 08:57
Цитата Сообщение от alpap Посмотреть сообщение
сопоставить время запуска к имени запустившего
Не проще SessionId брать?
PowerShell
1
((quser (gwmi -query "Select SessionId From Win32_Process where Name='winlogon.exe'").SessionId|select -skip 1) -split ' {3,}')[0].Trim('>')
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
20.09.2021, 04:52
Цитата Сообщение от FlasherX Посмотреть сообщение
Не проще ...
да это мало что дает
тут надо статистику запуска файла по времени (прописывать в самом файле вывод времени его запуска в лог) сравнивать с входом пользователей по RDP, надеясь что они почти сразу запускают этот файл. А вот определить четко этих пользователей не так просто. Можно из журнала: Applications ans Services Logs -> Microsoft -> Windows ->TerminalServices-RemoteConnectionManager по фильтру кода 1149, но не всегда надежно и то журнал не включен или очищен или еще что. Пробовал так еще
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$myLog = 'Security'
$comp  = 'Имя компа'
$iId   = 4624
 
$aEv    = @()
$eventLog = New-Object System.Diagnostics.Eventlog($myLog, $comp)
$eventLog.Entries|? InstanceId -eq $iId|% {
  $oEv = [PSCustomObject][Ordered]@{
    'User' = ($_.Message -Split ',')[6].Trim().Trim("'")
    'Data' = [DateTime]$_.TimeGenerated
  }
  $aEv += $oEv
}
$aEv|Sort Data
тоже не все гладко, недостаточный поиск и тоже ненадежно
поэтому и спрашивал у ТС может как с другой стороны пробовать - поменять подход в корне ...
1
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
25.09.2021, 10:04  [ТС]
Действительно, кроме как журнал ничего больше на ум не приходит, но решение неидеальное. Пришлось отказаться от этой идеи и заходить "с другой стороны".

Спасибо за ответы!
0
0 / 7 / 0
Регистрация: 28.12.2021
Сообщений: 22
28.12.2021, 16:37
Цитата Сообщение от alpap Посмотреть сообщение
журнал - время запуска этого файла(Имя пользователя)

Добавлено через 2 часа 41 минуту

первые три работают как в cmd так и в PowerShell
PowerShell
1
2
3
4
tasklist /V /FI "ImageName eq explorer.exe" /FO List
quser
qwinsta
gcim Win32_ComputerSystem -Computer "..."|select UserName
Я думаю, что можно это сократить до:
Windows Batch file
1
echo %UserName%
Или использовать:
Windows Batch file
1
2
set Name=%UserName%
echo %Name%
Ну с "%UserName%" можно играть довольно долго!
0
6970 / 2864 / 1100
Регистрация: 06.06.2017
Сообщений: 9,720
28.12.2021, 18:40
Цитата Сообщение от VECR Посмотреть сообщение
Я думаю, что можно это сократить до:
Только к сабжу эта переменная среды как мёртвому припарки...
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
29.12.2021, 00:24
@sMario простите за несведещего как именно ваши пользователи запускают вручную и исключительно от имени администратора ,

если через
win32 api logonasuser


a.k.a.
https://docs.microsoft.com/en-... ew=net-6.0

то вот эвент 4648


4648: A logon was attempted using explicit credentials



https://www.ultimatewindowssec... 648#fields

Subject:
This is the original account that started a process or connection using new credentials.

Account Whose Credentials Were Used:
These are the new credentials.

Добавлено через 17 минут
прям так и пишет

This event is generated when a process attempts to log on an account by explicitly specifying that account’s credentials.
This most commonly occurs in batch-type configurations such as scheduled tasks, or when using the RUNAS command.

заполяет

subject

и
Account Whose Credentials Were Used


как искать евенты думаю все знают
0
0 / 7 / 0
Регистрация: 28.12.2021
Сообщений: 22
29.12.2021, 10:37
Цитата Сообщение от alpap Посмотреть сообщение
да это мало что дает
тут надо статистику запуска файла по времени (прописывать в самом файле вывод времени его запуска в лог) сравнивать с входом пользователей по RDP, надеясь что они почти сразу запускают этот файл. А вот определить четко этих пользователей не так просто. Можно из журнала: Applications ans Services Logs -> Microsoft -> Windows ->TerminalServices-RemoteConnectionManager по фильтру кода 1149, но не всегда надежно и то журнал не включен или очищен или еще что. Пробовал так еще
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$myLog = 'Security'
$comp  = 'Имя компа'
$iId   = 4624
 
$aEv    = @()
$eventLog = New-Object System.Diagnostics.Eventlog($myLog, $comp)
$eventLog.Entries|? InstanceId -eq $iId|% {
  $oEv = [PSCustomObject][Ordered]@{
    'User' = ($_.Message -Split ',')[6].Trim().Trim("'")
    'Data' = [DateTime]$_.TimeGenerated
  }
  $aEv += $oEv
}
$aEv|Sort Data
тоже не все гладко, недостаточный поиск и тоже ненадежно
поэтому и спрашивал у ТС может как с другой стороны пробовать - поменять подход в корне ...
Простите! А какое расширение у файла PowerShell?
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
29.12.2021, 18:06
вот я
C#
1
 Account Name:           sergueik
делал runas cyg_server
C#
1
        Account Name:           cyg_server
на виртуальной машине

скрипт

C#
1
2
3
4
5
6
7
8
9
$myLog = 'Security'
$comp  = '.'
$iId   = 4648
 
$aEv    = @()
$eventLog = New-Object System.Diagnostics.Eventlog($myLog, $comp)
$eventLog.Entries|where-object { $_.InstanceId -eq $iId }|select-object -first 10 |foreach-object {
write-host $_.Message
}
часть напечатанного на экране
C#
1
2
3
4
5
6
7
8
9
10
11
A logon was attempted using explicit credentials.
Subject:
        Account Name:           sergueik
        Account Domain:         sergueik42
        Logon ID:               0x154a7
        Logon GUID:             {00000000-0000-0000-0000-000000000000}
 
Account Whose Credentials Were Used:
        Account Name:           cyg_server
        Account Domain:         sergueik42
        Logon GUID:             {00000000-0000-0000-0000-000000000000}
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
29.12.2021, 20:52
skouzmine, ну не знаю, мне 4624 показалось надежнее.
0
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
29.12.2021, 22:13
alpap 4624 не содержит а 4648 содержит информации о том кто запустил runas в чем ТС заинтересован
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
30.12.2021, 15:47
да, согласен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.12.2021, 15:47
Помогаю со студенческими работами здесь

Как создать командный файл, который в заданной папке будет создавать подпапки для каждого пользователя
Имена подпапок должны совпадать с логинами пользователей из текстового файл С помощью каких команд или процедур все это можно...

Создать командный файл, который позволяет по требованию пользователя
Создать командный файл, который позволяет по требованию пользователя: а) копировать указанный исполняемый файл с дискеты в каталог...

Как в windows 2008 server создать файл от имени другого пользователя?
как в windows 2008 server от локального пользователя "А" запустить процесс от пользователя "Б" и в этом процессе (или треде)...

Как получить имя пользователя, который открыл файл?
в VBScript пытаюсь создать подключение к excel файлу. но эта таблица лежит на сервере, иногда эта таблица бывает занята другим...

Можно ли и как узнать имя пользователя открывшего файл
Можно ли и как узнать имя пользователя открывшего файл? Собственно сабж.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru