我在一台特定的机器上运行一个自动化过程,可能是 Windows 7 机器或 Windows Server 2012 机器。这些机器通过网络连接到文件服务器。网络是一个 40GB 的网络,所以速度不慢。我们必须传输大量数据。其中一些传输只是从文件服务器到文件服务器的文件复制。也就是说,在我们的 AppServer 机器上,我们(有效地)执行如下命令
\AppServer\C$> 复制 \FileServer\Share\Dir1* \FileServer\Share2\Dir2
或者可能
\AppServer\C$> robocopy \FileServer\Share\Dir1 \FileServer\Share2\Dir2 /S *
即使在 40GB 的网络上,一些复制也需要花费大量时间,例如 10 分钟,并且可能会重复 20 次。
由于没有网络瓶颈,在文件服务器本身上执行相同的复制要快得多。我们完全可以在 powershell 中使用远程执行在文件服务器上完成复制。我们目前正在对一些较大的目录执行此操作。但是,仅在 powershell 中设置远程命令会产生很大的开销,我正在寻找一种更好的方法来执行远程复制。
有人能推荐一下在文件服务器本身上执行远程复制的最佳方法吗?谢谢。
答案1
- 使能够PowerShell 远程处理在您的服务器上。
- 使用
Invoke-Command
。
我还建议确保所有服务器上的 PowerShell 都是同一版本。据我所知,Server 2012 附带 PowerShell 3.0,而 Serve 2012 R2 附带 4.0。3.0 和 4.0 都适用于 Win7 和 Server 2008,因此几乎没有理由不升级。语法上的细微改进(尤其是 Get-ChildItem 的-Directory
和-File
,Where-Object
能够管道输出,并且当您想使用 Count() 方法时,无需担心事物有时是数组或不是数组)在我看来是值得的。此外,ISE 在 4.0 上表现相当不错。
答案2
PsExec 是一个经常用于在远程计算机上执行命令的工具。
微软的一款工具 PsExec这里。
PsExec 是一种轻量级的 telnet 替代品,它允许您在其他系统上执行进程,并为控制台应用程序提供完整的交互性,而无需手动安装客户端软件。PsExec 最强大的用途包括在远程系统上启动交互式命令提示符和远程启用工具(如 IpConfig),否则这些工具无法显示有关远程系统的信息。
PsExec 是 PsTools 的一部分。
使用 PsExec
请参阅 2004 年 7 月版的 Windows IT Pro Magazine 杂志中 Mark 的文章,其中介绍了 PsExec 的高级用法。
用法:psexec [\\computer[,computer2[,...] | @file]][-u user [-p psswd][-ns] [-r 服务名称][-h][-l][-s|-e][-x][-i [会话]][-c [-f|-v]][-w 目录] [-d][-][-an,n,...] cmd [参数] -a 用逗号分隔应用程序可以在哪些处理器上运行,其中 1 表示 编号最小的 CPU。例如,要在 CPU 2 上运行应用程序, CPU 4,输入:“-a 2,4” -c 将指定程序复制到远程系统执行。如果省略 使用此选项时应用程序必须位于远程系统的系统路径中。 -d 不等待进程终止(非交互式)。 -e 不加载指定帐户的配置文件。 -f 复制指定的程序,即使文件在远程已经存在 系统。 -i 运行程序,使其与指定 远程系统上的会话。如果没有指定会话,则进程运行在 控制台会话。 -h 如果目标系统是 Vista 或更高版本,则进程是否使用 帐户的提升令牌(如果可用)。 -l 以受限用户身份运行进程(剥夺管理员组并仅允许 分配给用户组的权限)。在 Windows Vista 上,进程 以低完整性运行。 -n 指定连接到远程计算机的超时时间(秒)。 -p 指定用户名的可选密码。如果省略此项,则 提示输入隐藏密码。 -r 指定要创建或交互的远程服务的名称。 -s 在系统帐户中运行远程进程。 -u 指定用于登录远程计算机的可选用户名。 -v 仅当指定文件具有更高版本号或较新时才复制它 而不是远程系统上的。 -w 设置进程的工作目录(相对于远程计算机)。 -x 在 Winlogon 安全桌面上显示 UI(仅限本地系统)。
-priority 指定 -low、-belownormal、-abovenormal、-high 或 -realtime 来 以不同的优先级运行进程。使用 -background 以低优先级运行 Vista 上的内存和 I/O 优先级。 计算机 Direct PsExec 在远程计算机上运行应用程序或 指定的计算机。如果省略计算机名称,PsExec 将运行 本地系统上的应用程序,并且如果指定通配符 (\\*), PsExec 在当前域中的所有计算机上运行该命令。 @file PsExec 将在以下列出的每台计算机上执行该命令 文件。 cmd 要执行的应用程序的名称。 参数传递的参数(注意文件路径必须是绝对路径) 目标系统)。 -accepteula 此标志抑制许可证对话框的显示。
您可以用引号将名称中包含空格的应用程序括起来,例如
psexec \marklap"c:\长名称 app.exe"