序:项目为B/S架构,提供的功能通过多个服务实现,当页面配置有变更时,需重启服务。
Python调用Win命令有3种方式:
os.system('command')
os.popen('command')
subprocess('command',stderr,stdout,stdin,shell=True)
而远程管理也有几种实现方式:
wmic /node:远程服务器 /user:用户 /password:密码 CMD命令
winrm CMD命令
PowerShell中CMDLET命令
因wmic、Winrm执行需配置各种权限,存在失败的风险,最后选用PowerShell方式。
- # WMIC方式
- def restartService(node='x.x.x.x', servicename='ServiceName'):
- # 重启服务
- ex = 'Method execution successful.'
- err = 'No Instance(s) Available.'
- s = os.popen('wmic /node:%s /user:user /password:password SERVICE where name="%s" call stopservice' % (node, servicename))
- sres = s.read()
- s.close()
- time.sleep(3)
-
- if ex in sres:
- # sys.stdout.write('Service Stop Successfully!')
- tsr = os.popen('wmic /node:%s /user:user /password:password SERVICE where name="%s" call startservice' % (node, servicename))
- ts = tsr.read()
- tsr.close()
- if ex in ts:
- # sys.stdout.write('\nService start successfully!')
- return True
- elif err in ts:
- # sys.stdout.write('Service not exit')
- return False
- elif err in sres:
- # sys.stdout.write('Service not exit')
- return False
以下为PowerShell实现:
- # PowerShell实现
- def ps(name='computername', sname='servicename'):
- import subprocess
- try:
- res = subprocess.run(["powershell.exe", "Invoke-Command -ComputerName %s -ScriptBlock {Get-Service -Name %s | Restart-Service}" % (name, sname)], stdout=subprocess.PIPE)
- except:
- return False
- else:
- if res.returncode == 0:
- return True
特记录之。