序:项目为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
特记录之。