【问题标题】:c# run local program via RDP using PsExecc# 使用 PsExec 通过 RDP 运行本地程序
【发布时间】:2017-08-10 16:47:46
【问题描述】:

有没有办法通过 rdp 运行本地程序 类似的东西:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true;  
p.StartInfo.RedirectStandardError = true; 
p.StartInfo.RedirectStandardInput = true; 
p.StartInfo.FileName = @"G:\PSTools\PsExec.exe"; 
p.StartInfo.Arguments = @"\\tsclient calc.exe"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
string errormessage = p.StandardError.ReadToEnd(); 
p.WaitForExit();

在这种情况下,我得到了:

句柄无效。正在连接 tsclient...无法访问 tsclient

谢谢

【问题讨论】:

  • 请更具体地说明您想要做什么。现在我将其理解为“我想从本地机器上的远程机器运行程序”。你确定这是你想说的吗?
  • 你试图在远程机器上运行一些东西,那么为什么要通过 RDP 呢? psexec 正是为您做这件事。如果“tsclient”是您的远程计算机的名称,那么这将起作用。还要删除 cmd.exe,直接调用 calc.exe(或任何你想要的程序),否则它将不起作用。也许您需要 .exe 的完整路径名

标签: c#


【解决方案1】:

最后,我们有了 PowerShell 远程处理。前两种方法 使用的 WMI 取决于计算机上启用的远程 DCOM。这个 可能是也可能不是问题,但有时会带来安全风险。 您还可以通过 Invoke-Command cmdlet 使用 PowerShell 远程处理 在远程计算机上以及通过 WSMAN 启动进程, 这是一种更新、更安全的协议。

为此,我们将使用两个 cmdlet 的组合:Invoke-Command to 使我们能够在远程计算机上运行命令并 Start-Process 来实际执行进程。

Invoke-Command –ComputerName MEMBERSRV1 –ScriptBlock {Start-Process notepad.exe}

取自here

这也是一个带有完全相同问题的 SO 帖子:SO

您不需要运行 RDP 来启动远程进程。 远程命令执行有多个库和协议。 我建议阅读链接的 SO,以获取有关如何执行 psExec 调用的更多信息。

【讨论】:

    最近更新 更多