第一次接触Linux远程执行Windows脚本,刚开始国内相当多的资料一大批其实都是Windows作为远程执行其它机器的。
后来接触pywinrm这个开源框架,又想想ansible的一个控制Windows的情况,好像是可以实现的。其是后来看看两者都借助winrm这个模块而已。
Requirements:
参考这个地址:点击打开链接 虽然它提到的是ansible,但是我觉得非常讲的不错。
Windows需要条件如下,反正我是不懂windows的,只好拿过来了。这三个条件最好都能实现。
(1) 管理机必须为Linux系统且需预安装Python Winrm模块
(2) 底层通信基于PowerShell,版本为3.0+,Management Framework版本为3.0+
(3) 远程主机开启Winrm服务
在我的Windows机器D盘有一个demo.bat脚本,内容如下:
Mac主控机代码
# coding:utf-8
try:
import winrm
except ImportError,e:
print e
try:
s = winrm.Session('192.168.1.101', auth=('Administrator', 'DEMAxiya520!'))
# r = s.run_cmd('ipconfig')
# r = s.run_cmd('ipconfig', ['/all'])
get_dir = s.run_cmd('d: & demo.bat')
except Exception,e:
print e
print "connection in windows was failed!"
print ("status_code",get_dir.status_code)
print ("std_out",get_dir.std_out)
print ("std_err",get_dir.std_err)
执行结果:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/feixiaohui/github/untitled/demo_pywinrm.py
('status_code', 0)
('std_out', '"hello world!"\r\n')
('std_err', '')
Process finished with exit code 0
其中第二三四行显示的就是执行的结果。
终于实现了!