Runas в другом терминальном сеансе Windows
Для простоты, скажем, пользователь Administrator
залогинен в терминальной сессии 2
, Другой пользователь Boda
зарегистрирован в терминальной сессии 3
,
Это возможно runas
программа в сессии 3
с сессии 2
?
Для простоты, скажем, я хочу начать calc.exe
в сессии 3
(на сессии Боды). Как я могу это сделать? Можно ли это сделать с runas
?
5 ответов
Как Гарри Джонстон предложил в комментарии, вы можете сделать это, используя psexec
инструмент доступен на TechNet. Я пробовал использовать Windows 2008 Server, на котором запущены службы терминалов, и мне удалось запустить различные приложения в сеансе других пользователей (хотя не calc.exe - он запустился, но свернулся, и окно было отказано в восстановлении), в том числе cmd.exe.
Команда, которую я использовал, была psexec.exe -i 3 cmd.exe
где 3
это номер сеанса (который вы можете получить из qwinsta.exe
).
Пример: удаленный сеанс, вошедший в систему как администратор; используя qwinsta для перечисления сессий и psexec
начать cmd.exe
на другой сессии.
Другой сеанс: вошел как Патрик, с cmd.exe
окно на рабочем столе, открытое администратором (которое также показывает заголовок окна).
Существует инструмент командной строки, который называется RunInSession. Вам нужно указать хотя бы SessionId
в котором вы хотите запустить процесс и какой процесс вы хотите запустить. Необязательно - имя сервера, если вы хотите запустить на удаленном сервере. Если вы запустите его без параметров, появится диалог с возможными параметрами:
В настоящее время поддерживаются версии ОС Windows XP, 2003, Vista и 2008.
Программа должна запускаться в контексте пользователя Localsystem, поэтому она временно устанавливает себя в качестве службы и запускается сама. С помощью WTSQueryUserToken он получает токен основного пользователя запрошенного терминального сеанса. Наконец, процесс запускается с помощью CreateProcessAsUser, и служба удаляет себя.
Больше деталей:
Это своего рода хак, но это очень полезно для меня. Гораздо быстрее, чем psexec.exe в моей среде.
Просто создайте временную задачу на удаленном компьютере для конкретного пользователя или группы, запустите ее, а затем удалите задачу.
Я создал для него скрипт powershell:
param (
[string]$Computer = ($env:computername),
[string]$User = "",
[string]$Command,
[string]$Args
)
$script_task =
{
param (
[string]$User = "",
[string]$Command,
[string]$Args
)
#Action
$Action = New-ScheduledTaskAction –Execute $Command
if($Args.Length > 0) { $Action = New-ScheduledTaskAction –Execute $Command -Argument $Args}
#Principal
$P = New-ScheduledTaskPrincipal -UserId $User -LogonType Interactive -ErrorAction Ignore
#Settings
$S = New-ScheduledTaskSettingsSet -MultipleInstances Parallel -Hidden
#Create TEMPTASK
$TASK = New-ScheduledTask -Action $Action -Settings $S -Principal $P
#Unregister old TEMPTASK
Unregister-ScheduledTask -TaskName 'TEMPTASK' -ErrorAction Ignore -Confirm:$false
#Register TEMPTASK
Register-ScheduledTask -InputObject $TASK -TaskPath '\KD\' -TaskName 'TEMPTASK'
#Execute TEMPTASK
Get-ScheduledTask -TaskName 'TEMPTASK' -TaskPath '\KD\' | Start-ScheduledTask
#Unregister TEMPTASK
Unregister-ScheduledTask -TaskName 'TEMPTASK' -ErrorAction Ignore -Confirm:$false
}
#The scriptblock get the same parameters of the .ps1
Invoke-Command -ComputerName $Computer -ScriptBlock $script_task -ArgumentList $User, $Command, $Args
Пример использования:
file.ps1 -User USER_NAME -Command notepad.exe -Computer REMOTE_COMPUTER
Это может быть заархивировано с помощью инструментов Sysinternals от Microsoft. Помимо удаленного запуска списков команд и скриптов, они полезны для многих вещей. Как админ, они были моим спасителем много раз.
#To run a command on single computer remotly
psexec \\RemoteComputerName Path_Of_Executable_On_Remote_Computer Argument_list
#To run a command on list of computers remotely.
psexec @Remote_Computer_list Path_Of_Executable_On_Remote_Computer Argument_list /AcceptEULA
#To run list of commands on list of remote computer. make sure you copy batch file before you run command below.
psexec @Remote_Computer_List Path_Of_Batch_On_Remote_Computer Argument_list
Я не знаю, каким образом вы можете контролировать другой открытый сеанс cmd. Тем не менее, вы должны быть в состоянии использовать runas
запустить его как другой пользователь.