通过 RDP 使用命令行从远程 Windows 机器复制文件

Copy files from remote Windows machines with command-line, through RDP

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

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

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

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

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

  1. 运行 登录时远程 session 中的脚本。我可以想到三种方法来执行此操作:
    • 使用 "Alternate Shell" RDP 文件 属性。这 运行 是一个指定的程序,用于代替登录时的 explorer.exe;例如,您可以将它用于 运行 "cmd.exe /c [your script]"。
    • 如果这不起作用(例如,远程计算机不遵守它),您可以使用计划任务,该任务 运行 在登录时执行脚本,但可能仅针对指定的用户,或者脚本可以在执行任何操作之前检查 WinStation 类型以确保这实际上是一个 RDP 连接。
    • 也可以通过在 RemoteApp 模式下连接并使用脚本作为您的 "application" 来执行此操作,但这仅适用于 Windows.
    • 的服务器版和企业版
  2. 在 RDP 连接上启用驱动器重定向或剪贴板重定向,以便您获取数据。
    • 驱动器重定向编写脚本要简单得多;您只需将远程脚本复制文件到例如"\\tsclient\C\logs".
    • 剪贴板重定向在理论上是可行的 - 您有远程脚本副本,然后是本地脚本粘贴 - 但在实践中可能会很痛苦。我只是在万一由于某种原因驱动器重定向不可用时才提到它。
  3. 您可能希望编写脚本,然后在 session 之后关闭。

然后您可以通过 运行ning "mstsc.exe [your RDP file]" 从 command-line 启动它。如果需要,可以以编程方式生成 RDP 文件(假设您使用的是 80 台机器)。

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

  1. 使用前面的方法运行 登录程序,但这次创建一个自定义应用程序,使用 阻止并执行的传输来接收命令他们在 session。例如,我已经通过 HTTP 使用 WCF 完成了此操作;这当然不安全。
  2. 在打开 RDP 虚拟通道的远程计算机上开发并安装服务,以及与之通信的相应 RDP 客户端插件。然后你可以通过连接做任何你想做的事。虽然此解决方案最有可能奏效,但它也是最重量级的并且 time-consuming 难以实施,因此它可能是最后的选择。