Runas在另一个Windows终端会话中

时间:2014-11-13 14:11:03

标签: windows terminal-services runas

为简单起见,假设用户Administrator已在终端会话2中登录。另一个用户Boda已登录终端会话3

会话runas的会话3中是否有2个会话?

为简单起见,假设我想在会话calc.exe中启动3(在Boda的会话中)。我怎么做?是否可以使用runas完成?

5 个答案:

答案 0 :(得分:10)

就像Harry Johnston在评论中建议的那样,你可以使用psexec工具available on TechNet来做到这一点。我已经尝试使用运行终端服务的Windows 2008 Server并设法在另一个用户会话中启动各种应用程序(虽然不是calc.exe - 它已启动但最小化并且窗口拒绝恢复),其中包括cmd.exe。

我使用的命令是psexec.exe -i 3 cmd.exe,其中3是会话编号(您可以从qwinsta.exe获得)。

示例:远程会话,以管理员身份登录;使用qwinsta枚举会话,使用psexec在另一个会话中启动cmd.exeenter image description here

另一个会话:以Patrick身份登录,桌面上的cmd.exe窗口由管理员打开(窗口标题也显示)。 enter image description here

答案 1 :(得分:6)

有一个命令行工具,它叫做RunInSession。您需要至少指定要在其中启动流程的SessionId以及要启动的流程。如果要在远程服务器上启动,则可选为servername。如果在没有参数的情况下运行它,则会显示带有可能参数的对话框:

RunInSession

目前支持的操作系统版本是Windows XP,2003,Vista和2008。

程序需要在Localsystem用户的上下文中运行,因此它会暂时将自身安装为服务并自行启动。使用WTSQueryUserToken,它将获取所请求的终端会话的主用户令牌。最后,使用CreateProcessAsUser启动该过程,服务将自行删除。

更多详情:

答案 2 :(得分:5)

它是一种黑客攻击,但对我来说非常有用。比我环境中的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

答案 3 :(得分:1)

我不知道您可以控制另一个打开的cmd会话。但是,您应该能够使用runas将其作为其他用户运行。

答案 4 :(得分:1)

这可以使用Microsoft的Sysinternals工具进行存档。除了远程运行命令和脚本列表之外,它们对很多事情都很有用。作为管理员,他们多次成为我的救世主。

#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