首页 > 解决方案 > 通过 RDP 使用命令行从远程 Windows 机器复制文件

问题描述

我们的团队有大约 80 台 Windows 开发机器,每个开发人员的活动都以文本文件的形式记录在这些机器的本地存储中。为了分析记录的活动,我想从这些机器上收集所有日志文件。此外,日志文件会不断更新,因此最好从我的机器上使用命令行收集文件。

我搜索并找到了一些解决方案,但所有这些都不适合我们的情况:

如何通过 RDP 使用命令行从远程 Windows 机器复制文件?或者,至少,有什么方法可以通过 RDP 使用命令行在远程 Windows 机器上执行命令?

标签: windowscommand-lineremote-desktoprdppsexec

解决方案


认为你可以做到这一点,虽然它很 hacky :)

对于只复制文件一次的基本设置,您需要做的是

  1. 登录时在远程会话中运行脚本。我可以想到三种方法来做到这一点:
    • 使用“备用外壳”RDP 文件属性。这会在登录时运行一个指定的程序来代替 explorer.exe;例如,您可以使用它来运行“cmd.exe /c [您的脚本]”。
    • 如果这不起作用(例如远程机器不尊重它),您可能能够使用在登录时运行脚本的计划任务,但可能仅适用于指定用户,或者脚本可能会检查 WinStation在执行任何操作之前键入以确保这实际上是 RDP 连接。
    • 也可以通过以 RemoteApp 模式连接并使用脚本作为您的“应用程序”来执行此操作,但这仅适用于 Windows 的服务器版和企业版。
  2. 在 RDP 连接上启用驱动器重定向或剪贴板重定向,为您提供一种获取数据的方法。
    • 驱动器重定向脚本要简单得多;您只需将远程脚本文件复制到例如“\\tsclient\C\logs”。
    • 剪贴板重定向在理论上是可能的——你有远程脚本副本,然后是本地脚本粘贴——但在实践中可能会很痛苦。我只是在驱动器重定向由于某种原因不可用的情况下才提到它。
  3. 您可能想要编写脚本,然后在之后注销会话。

然后,您可以通过运行“mstsc.exe [您的 RDP 文件]”从命令行启动它。如果需要,可以通过编程方式生成 RDP 文件(假设您使用 80 台机器)。

如果您想要一个持久连接,您可以执行命令,这会更复杂,但在技术上仍然可行。我能想到的两种方法:

  1. 使用前面的方法在登录时运行程序,但这次创建一个自定义应用程序,该应用程序使用阻塞的传输接收命令并在会话中执行它们。例如,我已经使用 WCF over HTTP 完成了这项工作;当然,这并不安全。
  2. 在远程机器上开发并安装一个服务,打开一个 RDP 虚拟通道,以及与之通信的相应 RDP 客户端插件。然后,您可以通过连接做任何您想做的事情。虽然这个解决方案最有可能奏效,但它也是最重量级且实施起来最耗时的,因此它可能是最后的手段。

推荐阅读