另一个Windows终端会话中的运行方式

另一个Windows终端会话中的运行方式,windows,terminal-services,runas,Windows,Terminal Services,Runas,为简单起见,假设用户管理员登录到终端会话2。另一个用户Boda登录到终端会话3 可以从会话2运行会话3中的程序吗 为简单起见,假设我想在会话3(在Boda的会话中)中启动calc.exe。我该怎么做?是否可以使用runas?像Harry Johnston在评论中建议的那样,您可以使用psexec工具来完成此操作。我曾尝试使用运行终端服务的Windows 2008服务器,并设法在另一个用户会话中启动各种应用程序(虽然不是calc.exe-它已启动,但最小化,窗口拒绝还原),其中包括cmd.exe

为简单起见,假设用户
管理员
登录到终端会话
2
。另一个用户
Boda
登录到终端会话
3

可以从会话
2
运行会话
3
中的程序吗


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

像Harry Johnston在评论中建议的那样,您可以使用
psexec
工具来完成此操作。我曾尝试使用运行终端服务的Windows 2008服务器,并设法在另一个用户会话中启动各种应用程序(虽然不是calc.exe-它已启动,但最小化,窗口拒绝还原),其中包括cmd.exe

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

示例:远程会话,以管理员身份登录;使用qwinsta枚举会话,并在另一个会话上启动
cmd.exe

另一个会话:以Patrick身份登录,管理员打开桌面上的
cmd.exe
窗口(窗口标题也显示了该窗口)。
我不知道有什么方法可以控制另一个open cmd会话。但是,您应该能够使用
runas
以另一个用户的身份运行它。

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

目前支持的操作系统版本有Windows XP、2003、Vista和2008

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

更多详情:


    • 这是一种黑客行为,但对我来说非常有用。在我的环境中比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
      

      可以使用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
      

      我坚信这是一个被问到的问题。投票支持迁移。谢谢。我不能发布给超级用户,因为我问了一些愚蠢的问题,打破了一些限制规则。我该如何迁移?我在这个网站上有强烈的因果报应,所以我也可以考虑迁移。如果你有权访问你问题下的密切链接,请转到
      主题之外,因为…->属于另一个网站->superuser.com
      。如果您在另一端有限制,则不确定该问题是否可以迁移,但是。FWIW,答案是“否”。不能在会话之间使用runas。不过,您可以在代码中执行此操作,尽管这有点棘手。就像一个符咒!!此工具使用用户凭据在需要的会话中打开所需的程序,但您不能在普通用户的会话中使用管理员权限打开它。它打开了该程序,但GUI已损坏。如果我尝试在自己的主机中打开它,它会说它不在受信任的主机中。您需要更改powershell运行策略。默认情况下,它不允许运行文件。