我正在寻找编写一个快速脚本来通过 RDP 客户端将一个文件(我经常更改)从我的工作站(windows7 OS)发送到远程服务器(windows server 2012)。
理想情况下,我希望使用一些参数来实例化 rdpclip.exe 进程。类似这样的内容:
rdpclip.exe -f [fileToCopyFromLocalToRemote]
但据我所知(以及简短的谷歌搜索),没有这样的等效方法。
此外,我不是寻找任何第三方工具来执行此操作!
答案1
您可以使用 PowerShell 将文件放入剪贴板:
Add-Type -AssemblyName System.Windows.Forms
$f = New-Object System.Collections.Specialized.StringCollection
$f.Add("D:\tmp\mypic1.bmp")
[System.Windows.Forms.Clipboard]::SetFileDropList($f)
答案2
如果你打算保持与 RDP 会话的连接,那么你可以映射驱动器在您的连接上,可使您的本地驱动器可供远程计算机使用。这是在远程桌面的本地资源标签下的更多的...按钮。
启用该功能后,您可以制定计划任务来复制文件。您可以从特殊共享名称\\tsclient\c
或您尝试访问的任何驱动器访问本地驱动器,如这篇 TechNet 文章. 因此,您可以运行以下示例脚本在远程计算机上可能看起来像这样:
IF EXIST "\\tsclient\c\Mydir\MyFile" copy /Y "\\tsclient\c\Mydir\MyFile" "C:\Syncrhonized\MyDir\MyFile"
您可以将其作为计划任务,每隔几分钟左右运行一次。如果其他人使用驱动器映射和文件结构远程访问此计算机,请注意潜在的问题。您的脚本不知道哪台计算机是正确的,除非您加入某种逻辑来检查这一点。
答案3
根据我的研究,rdpclip.exe 不接受任何命令行参数。使用它来以编程方式复制文件显然是错误的。
自 Windows Vista 起机器人复制是每个 Windows 安装的一部分。我不知道您想如何使用 rdpclip.exe 将文件传输到远程主机。但我的第一个想法是安装网络共享,使用 robocopy 传输文件并卸载网络共享。在脚本中它将如下所示:
net use \\Server\Sharename /USER:[username] [passwort]
robocopy [Source] [Destination]
net use \\Servername\Sharename /del
答案4
正如您所说,您无法与服务器共享本地硬盘,剩下的唯一共享机制就是剪贴板。
如果剪贴板可以通过 RDP 连接共享,则可以使用开源项目剪贴板 RDC。
该项目由一个非常小的 Java 程序组成,该程序在连接的两端启动。客户端程序用于对文件进行编码并将其加载到剪贴板,而服务器端程序则对其进行解码并将其存储在本地文件中。这里的限制是文件必须足够小才能适合剪贴板。
就目前情况而言,这比你想做的要多。但你可以修改这个简单的程序,把它分成两部分:
- 客户端程序将接受文件路径作为参数并将编码文件放在剪贴板上。
- 服务器端程序将循环,每隔几秒测试一次剪贴板上是否存在这样的文件,然后对其进行解码并将其存储在文件夹中。
由于这些将是您完全控制的自己的程序,您可以添加诸如将目标路径添加到您放置在剪贴板上的信息的功能,以便这成为自动将多个足够小的文件从客户端传输到服务器的通用工具。