温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

发布时间:2020-06-11 16:54:25 来源:网络 阅读:2885 作者:流星影shin 栏目:系统运维

1.    需求

在对windows服务器的运维当中,如果要查看当前的主机名、资源使用、软件安装情况等,大家是怎么操作呢,是登进去鼠标挨着点击查看,还是通过命令呢?貌似命令的方法比较专业一点。但是,如果要查看50台、100台甚至更多服务器的这些信息,好像就不这么简单了。

有没有想过,敲一条命令,十几秒钟,就可以查看多台windows服务器的主机名、资源使用、软件安装情况等信息呢;或者还是通过一条命令,就可以启动或者停止Nwindows服务器的系统服务、重启\关机、修改注册表等等,你能想到的大部分操作,在经过前期简单部署后,以后只通过一条命令,就可以实现同时对多台windows服务器的管理。下面就把这个设想实现。

 

2.    实现原理及展示

2.1原理

通过我在shell下写的脚本程序,利用Python中的paramiko模块,通过ssh协议验证windows的登录信息,然后调用windowsPowerShell来实现命令的执行。目前测试过windows server2008R2 2012R2 服务器,可以正常执行。

2.2展示2个简单例子:执行脚本后,输入windowsPowerShell命令即可

查询主机名

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

查看CPU使用率

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

只要是PowerShell支持的,都可以批量执行了。我这里只是2台测试,当然100台也一样出结果。

3.    准备

3.1   一台Centos系统:   我使用的虚拟机centos6.6 用来执行脚本,然后执行windows命令。需要有python(一般已经安装了)

3.2   软件:freesshd        官网上下载即可,主要是在被管理的windows服务器上安装,实现ssh验证

3.3  软件:SecureCRT或者Xshell   用来连接Centos虚拟机

3.4  可选软件:WinSCP     如果需要分发文件功能的话,windows服务器上还要需要安装此软件

 

4.    实现步骤及示例

4.1   windows服务器安装freesshdwinscp(winscp可选)  测试中我使用了2windows虚拟机

Winscpfreesshd的安装直接默认下一步即可;

Winscp安装完成后先在powershell里面执行命令,缓存主机密钥

cd 'C:\Program Files (x86)\WinSCP\' ; ./winscp.exe /console /command 'option batch continue' 'option confirm off' 'open sftp://root:root密码@centos主机IP:centos主机ssh端口

执行后按Y即可,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

freesshd安装完成后需要稍作设置,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

第一次运行freesshd如图

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

然后点击右下角的freesshd图标进行相关设置,SSH选项卡中,将Command shell设置成C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

Users选项卡中点击“Add…

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

在弹出的窗口加入windows服务器的管理员账号,然后将Shell打上√ 如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

最后可选择是否在Automatic updates里面关闭自动更新,我一般选择关闭

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

设置完成后,在开始-运行 里面键入services.mscfreesshd服务重启一下

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

Sshdwindows服务器上设置完成,可以通过telnet ssh端口的方式测试到windows的sshd服务是否正常,如telnet X.X.X.X 22

4.2   安全设置(可选):各windows服务器上配置ipsec只允许我们的centos服务器连接sshd22端口,这样就避免了其他未授权的ssh连接,建议设置(不设置或者会设置的可跳过此步骤下列内容)。

       开始-运行 里面键入gpedit.msc进入 Windows设置-安全设置-IP安全策略,在本地计算机  创建策略即可:

            先设置允许的主机,这里我们需要把centos主机加入允许,如部分截图,没截图的步骤默认点击“下一步”:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

完成后“确定”即可,然后开始建立一条拒绝任何地址(源地址:任何IP地址)到windows本机地址sshd端口的策略,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

确定后安全设置完成,然后分配策略使其生效,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

如果启用了防火墙的话,还需要在防火墙里面设置允许freesshd程序通过防火墙,设置完成后可以在centos服务器上telnet X.X.X.Xwindows服务器IP 22 的方式来测试连接是否OK,如图测试正常:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

 

4.3脚本准备

1)在本文后面下载shell脚本

2)在centos服务器中上传脚本,命令rz然后选择脚本上传即可(没有rz命令的通过yum install -y lrzsz命令安装),如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

3vim run_win_same_cmd.sh命令修改脚本,将后续要管理的各个服务器IP、用户名、密码加入其中,如图格式加入,然后保存即可。

 shell实现批量在多台windows服务器上执行同一命令并获取返回结果

注意ip,user,pwd的顺序是一一对应的,对应错误的话是无法通过验证的:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

   也可在windows中修改好了再上传到centos服务器,但是要注意最好运行下dos2unix命令转换一下。

 

4.4运行命令

1)在centos服务器中执行sh run_win_same_cmd.sh即可(注意脚本路径正确),如图,运行后提示选择,我们选择 1.批量运行windows命令 ,回车后提示输入windows命令,这里我们用一个简单的命令hostname来查看,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

再来个复杂点的命令(当然这种有点长的命令直接复制黏贴过来就行了),我们需要查看N台服务器各自的磁盘剩余空间:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

不熟悉powershell命令的话可以参考下面链接里面一些常用的Powershell运维命令,当然,更多的强大命令就根据自己需要去发现了。

链接:Windows PowerShell运维人员常用命令收集整理

2)如果需要分发文件或者软件的话,可以在运行脚本后,选择2.批量分发文件到windows ,可以实现把文件批量分发到各个windows服务器,如图:

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

windows服务器上查看文件已经复制过来了

shell实现批量在多台windows服务器上执行同一命令并获取返回结果

5.    脚本下载地址


  




 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI