一键帮你复制多个文件到多个机器——PowerShell小脚本(内附PS远程执行命令问题解析)

做为一个后台程序猿,常常须要把一堆程序集(DLL)或者应用程序(EXE)复制到多个服务器上,实现程序的代码逻辑更新,用以测试新的功能或改动逻辑。这里给你们介绍一个本身实现的PowerShell脚本,方便你们替换DLL或者EXE到多个Windows机器上。html

 

一.   脚本用途

用于方便复制多个文件到多个服务器上。shell

 

二.   脚本功能

脚本的主要功能以下:缓存

  • 支持经过最后修改时间过滤文件,设定时间以前的文件不进行复制操做(逻辑设计源于Rebuild代码后只替换新Build出来的有改动的文件);
  • 支持多文件夹多文件复制,文件夹和文件路径支持通配符;
  • 经过配置文件,支持复制文件前停到相关Windows服务或进程,复制文件后还会把Windows服务启动(逻辑设计为了不目的端已存在的文件被相关进程占用而致使复制失败的状况);
  • 支持一次操做复制到多个服务器上;
  • 支持命令行指定Computer参数,忽略配置文件中已经设置的多个服务器,只处理命令行中设置的服务器(逻辑设计为了处理这种状况:当复制到某一个目的端服务器失败的时候,解决问题后从新执行复制特定服务器的操做);
  • 经过配置文件控制,无需每次都输入繁琐的命令,可屡次循环使用。

 

三.   使用方法

命令参数简单以下,一共有三个可用参数:服务器

  • Path——配置文件路径,必备参数;
  • Credential——链接到远程服务器的认证信息,若是传入时不指定,会弹框强制指定;
  • Computer——须要操做的远程服务器地址或名字,若是传入,则忽略配置文件中设置的Server字段。

 

配置文件格式例子以下:学习

 

其中Server填远程服务器的地址,Service Display Name填复制文件前须要中止的Windows服务显示名字,Process Name填须要中止的进程名字,Item是要复制的文件或文件夹,以上参数能够有多个节点。测试

Last Write Time填时间戳,全部修改时间在这以后的文件夹和文件都将会被复制,只能有一个。优化

Destination Folder填要复制到的目的端机器的文件夹路径,若是没有会自动建立,只能有一个。ui

 

四.   效果截图

须要复制的源端文件夹以下:命令行

 

执行命令PowerShell窗口以下:设计

 

一个目的端服务器的效果:

 

 

五.   PowerShell远程执行命令异常状况解决

 

使用这个脚本的时候可能会遇到一点问题,和环境配置有关,具体状况和解决方法以下:

·         Running scripts is disabled on the system

如图,执行命令的时候报错:

 

解决方法:

以管理员运行Windows PowerShell,输入以下命令容许执行脚本” Set-ExecutionPolicy -ExecutionPolicy Unrestricted”。若是不想设置成Unrestricted,具体参考Set-ExecutionPolicy

 

·         The remove servers are not in the local server’s WinRM TrusterHosts list

如图,执行命令的时候报错:

 

解决方法:

以管理员运行Command Prompt,输入以下命令”winrm set winrm/config/client @{TrustedHosts="VM1,VM2"}”设置信任主机。

 

·         The user name or password is incorrect when creating new UNC folder

尽管密码已经确保正确了,可是远程建立文件夹或者复制文件的时候仍然报用户名密码错误。

解决方法:

一是手动直接访问UNC路径,把用户名密码保存在系统中,二是执行以下命令” cmdkey /add:targetname /user:username /pass:password”,把用户名密码缓存到系统中。

 

·         The remote servers do not have WinRM service configured

错误以下:

 

解决方法:

在目的端机器(10.2.38.53)上管理员运行Command Prompt,输入命令”winrm quickconfig”开启服务:

 

 

六.   部分代码截图

截图1.

 

截图2.

 

 

Note:脚本暂时不够完善,完成一点功能,可能有BUG,还有更多的优化空间,好比并行执行复制命令,支持全命令参数等,之后可能会继续更新优化。

脚本下载地址:http://files.cnblogs.com/files/lavender000/OneClickToReplaceMultipleFilesToMultipleServers.zip

 

[原创文章,转载请注明出处,仅供学习研究之用,若有错误请留言,如喜欢请推荐,谢谢支持]

[原文:http://www.cnblogs.com/lavender000/p/6958618.html,来自永远薰薰

相关文章
相关标签/搜索