一键帮你复制多个文件到多个机器——PowerShell小脚本(内附PS远程执行命令问题解析)
作为一个后台程序猿,经常需要把一堆程序集(DLL)或者应用程序(EXE)复制到多个服务器上,实现程序的代码逻辑更新,用以测试新的功能或改动逻辑。这里给大家介绍一个自己实现的PowerShell脚本,方便大家替换DLL或者EXE到多个Windows机器上。
一. 脚本用途
用于方便复制多个文件到多个服务器上。

二. 脚本功能
脚本的主要功能如下:
- 支持通过最后修改时间过滤文件,设定时间之前的文件不进行复制操作(逻辑设计源于Rebuild代码后只替换新Build出来的有改动的文件);
- 支持多文件夹多文件复制,文件夹和文件路径支持通配符;
- 通过配置文件,支持复制文件前停到相关Windows服务或进程,复制文件后还会把Windows服务启动(逻辑设计为了避免目的端已存在的文件被相关进程占用而导致复制失败的情况);
- 支持一次操作复制到多个服务器上;
- 支持命令行指定Computer参数,忽略配置文件中已经设置的多个服务器,只处理命令行中设置的服务器(逻辑设计为了处理这种情况:当复制到某一个目的端服务器失败的时候,解决问题后重新执行复制特定服务器的操作);
- 通过配置文件控制,无需每次都输入繁琐的命令,可多次循环使用。
三. 使用方法
命令参数简单如下,一共有三个可用参数:
- Path——配置文件路径,必备参数;
- Credential——连接到远程服务器的认证信息,如果传入时不指定,会弹框强制指定;
- Computer——需要操作的远程服务器地址或名字,如果传入,则忽略配置文件中设置的Server字段。

配置文件格式例子如下:

其中Server填远程服务器的地址,Service Display Name填复制文件前需要停止的Windows服务显示名字,Process Name填需要停止的进程名字,Item是要复制的文件或文件夹,以上参数可以有多个节点。
Last Write Time填时间戳,所有修改时间在这之后的文件夹和文件都将会被复制,只能有一个。
Destination Folder填要复制到的目的端机器的文件夹路径,如果没有会自动创建,只能有一个。
四. 效果截图
需要复制的源端文件夹如下:

执行命令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,来自永远薰薰]
一键帮你复制多个文件到多个机器——PowerShell小脚本(内附PS远程执行命令问题解析)的更多相关文章
- Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包
1.UDP通信编解码类 (1) 类 # ------------------UDP通信解码编码类------------------------ from socket import * class ...
- 利用scp 远程上传下载文件/文件夹和ssh远程执行命令
利用scp传输文件 1.从服务器下载文件scp username@servername:/path/filename /tmp/local_destination例如scp codinglog@192 ...
- 使用paramiko远程执行命令、下发文件
写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...
- expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
自动同步文件 #!/usr/bin/expect set " spawn rsync -av root@.txt /tmp/ expect { "yes/no" { se ...
- 远程执行命令和文件分发shell脚本
deploy.conf node01,all,other,datanode,journalnode,zookeeper, node02,all,other,datanode,journalnode,z ...
- 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件
本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...
- expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行命令
7月20日任务 20.31 expect脚本同步文件20.32 expect脚本指定host和要同步的文件20.33 构建文件分发系统20.34 批量远程执行命令扩展:shell多线程 http:// ...
- Python Paramiko实现sftp文件上传下载以及远程执行命令
一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...
- Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件
一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...
随机推荐
- php object 对象系统
php object 对象系统 概述 本节内容仅谈论对象系统内容, 对于相关内容并不做更深一步的扩展, 相关扩展的内容会在后续补充 object 对象属于 zval 结构的一种形式 php 将所有执行 ...
- Android -- 从源码解析Handle+Looper+MessageQueue机制
1,今天和大家一起从底层看看Handle的工作机制是什么样的,那么在引入之前我们先来了解Handle是用来干什么的 handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要 ...
- MVC框架中,遇到 [程序集清单定义与程序集引用不匹配]怎么办?
项目里有一个WinForm程序,它需要使用一套第三方控件.而我的机器上存有这套控件的两种版本(一个是源码版,一个是演示版).结果经常出现“程序集清单定义与程序集引用不匹配的问题”的异常.最要命的是有时 ...
- 【原创】bootstrap框架的学习 第八课 -[bootstrap表单]
Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 吹着表单或基本表单 向父 <form> 元素添加 role="form". 把标签 ...
- python中str的find()
今天学习语法的时候发现字符串自带函数find和操作符in功能十分近似,几乎一模一样 if 'a' in name: print 'Yes, it contains the string &quo ...
- 关于Content-Type的问题
今天我在编写html表单提交到 php时,出现了一个很奇怪的现象. 为了让php文件的字符编码与html一致,我在php文件加了一句 header("Content-Type:html/te ...
- 使用 Laravel 实现微型博客系统
参考链接:An Introduction to Laravel Authorization Gates 这个微型博客系统包含两个用户角色(作者 和 编辑),它们的权限如下: 作者能创建博客 作者能更新 ...
- 谷歌统计使用代码部署和事件API使用
谷歌统计代码部署和API使用 1.注册谷歌账号 要使用GA,必需先成为GOOGLE的注册用户,如果没有请去注册.当然,你有GMAIL邮箱就可以.邮箱就是帐户名. 2.开启Google Analytic ...
- 交换机进行VLAN划分
一个交换机连接两个虚拟局域网(vlan10和vlan20),通过设置交换机,实现同一虚拟局域网内部相互通信,不同虚拟局域网内不能相互通信 (vlan 将整个网络划分多个广播域,vlan主机不受地理位置 ...
- 更新jar包里的配置文件
更新jar包里的配置文件 起因 从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了.本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新 ...