作为一个后台程序猿,经常需要把一堆程序集(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远程执行命令问题解析)的更多相关文章

  1. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包

    1.UDP通信编解码类 (1) 类 # ------------------UDP通信解码编码类------------------------ from socket import * class ...

  2. 利用scp 远程上传下载文件/文件夹和ssh远程执行命令

    利用scp传输文件 1.从服务器下载文件scp username@servername:/path/filename /tmp/local_destination例如scp codinglog@192 ...

  3. 使用paramiko远程执行命令、下发文件

    写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...

  4. expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令

    自动同步文件 #!/usr/bin/expect set " spawn rsync -av root@.txt /tmp/ expect { "yes/no" { se ...

  5. 远程执行命令和文件分发shell脚本

    deploy.conf node01,all,other,datanode,journalnode,zookeeper, node02,all,other,datanode,journalnode,z ...

  6. 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件

    本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...

  7. expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行命令

    7月20日任务 20.31 expect脚本同步文件20.32 expect脚本指定host和要同步的文件20.33 构建文件分发系统20.34 批量远程执行命令扩展:shell多线程 http:// ...

  8. Python Paramiko实现sftp文件上传下载以及远程执行命令

    一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...

  9. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

随机推荐

  1. Android开发事件总线之EventBus运用和框架原理深入理解

    [Android]事件总线之EventBus的使用背景 在我们的android项目开发过程中,经常会有各个组件如activity,fragment和service之间,各个线程之间的通信需求:项目中用 ...

  2. LED操作

    灯上拉 GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_InitS ...

  3. 破解Linux系统开机密码

    在我们使用Linux虚拟机的时候,经常会忘记自己设置的开机密码,无奈之下只有重新建一个虚拟机,然而新建往往会浪费掉我们很多时间,这时候,知道如何破解Linux系统密码就显得很重要了. 下面我们使用bo ...

  4. 使用validator-api来验证spring-boot的参数

    作为服务端开发,验证前端传入的参数的合法性是一个必不可少的步骤,但是验证参数是一个基本上是一个体力活,而且冗余代码繁多,也影响代码的可阅读性,所以有没有一个比较优雅的方式来解决这个问题? 这么简单的问 ...

  5. Angularjs快速入门(一)

    这系列是看<用angularjs开发下一代web应用>的笔记. angular也接触几个月,总觉得不甚明白,写起来总是不那么如意.希望这本书看完了可以改变现在的状况.好了废话不多说开始: ...

  6. centeOS6.5 RPM方式安装MySQL5.6

    RPM方式安装MySQL5.6 a. 检查MySQL及相关RPM包,是否安装,如果有安装,则移除(rpm –e 名称) 1 [root@localhost ~]# rpm -qa | grep -i ...

  7. 软件开发的一些"心法"

    从事软件开发也有好几年了,和一开始那个懵懵懂懂的小菜鸟相比,自己也感觉到了一些变化. 也许是熟能生巧, 趟过很多坑,但核心的绝不是这些细节的东西. 打个比方,如果说对某种语言的特性和技巧的掌握属于身法 ...

  8. 搭建struct环境

    昨天学习了struts,发现struts并不是struts2同一框架的升级,完全是属于两个框架.struts2是在freework的基础上进行封装的. 1.struts的环境搭载   (1)创建web ...

  9. 服务器数据库挂掉 Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ";

    刚刚遇到这个报错,我无语了,我这么个菜逼,咋解决,还好师兄(付付)解决了,付付真棒,在此记录一下,以供学习 Can 't connect to local MySQL server through s ...

  10. 也许是目前实现最好的js模拟滚动插件

    finger-mover 是一个集成 Fingerd(移动端以手指为单位的事件管理方案) 和 Moved(微型运动方案) 为一体的移动端动效平台,finger-mover 本身并不能为你做什么,但是附 ...