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 в котором вы хотите запустить процесс и какой процесс вы хотите запустить. Необязательно - имя сервера, если вы хотите запустить на удаленном сервере. Если вы запустите его без параметров, появится диалог с возможными параметрами:

RunInSession

В настоящее время поддерживаются версии ОС 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 запустить его как другой пользователь.

Другие вопросы по тегам