Python写一个Esxi服务器便携开关虚拟机与查看电源状态的程序
本帖最后由 你怎么长不高啊 于 2022-6-23 14:53 编辑因自己有一台ESXI7服务器,直通了独显和usb给win11连显示器输出做HTPC主机,
每次想把黑群晖或者其他win或linux虚拟机开关机的时候就需要登入WEB后台,
或者使用VMware客户端进行操作,觉得有点麻烦不够便利,于是自己写了个很简易的程序。
这个程序好像也没什么用处,但是自己觉得方便了一些,但是同理可以修改一下作为远程linux实现需要的操作用途。
开启SSH服务,用命令正常关机虚拟机大概有两种方式(需要先给虚拟机安装vmwaretools工具):
1、esxcli vm process kill --type=soft --world-id=WorldNumber #执行正常关机,调用vmwaretools工具
2、vim-cmd vmsvc/power.shutdown VMID #执行正常关机,调用vmwaretools工具
第一种方式有个弊端就是虚拟机每次启动world-id就会变动一次,所以这里我采用第二种方式使用vim-cmd命令来控制不变的虚拟机VMID
相关操作命令(可根据需求自行修改):
vim-cmd vmsvc/getallvms #获取所有虚拟机的vmid信息
vim-cmd vmsvc/power.getstate VMID #通过VMID查询相应的虚拟机的当前状态:开关机
vim-cmd vmsvc/power.on VMID #打开虚拟机电源
vim-cmd vmsvc/power.shutdown VMID #虚拟机正常关机
vim-cmd vmsvc/power.off VMID #关闭虚拟机电源
vim-cmd vmsvc/power.reset VMID #重启虚拟机
esxcli vm process list #查看正在运行的虚拟机
esxcli vm process kill --type=soft --world-id=WorldNumber #执行正常关机,调用vmwaretools工具
esxcli vm process kill --type=hard --world-id=WorldNumber #断开电源
esxcli vm process kill --type=force --world-id=WorldNumber #强制关机
代码很简单,只需要用到paramiko模块,全部代码如下:
#-*- coding: utf-8 -*-
import paramiko
#Esxi服务器SSH连接信息
hostip = input("请输入服务器IP或域名:")
user = 'root'
passwd = input("请输入服务器密码:")
print("正在连接服务器...")
#主程序
def run():
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostip, 22, user, passwd)
print("%s连接成功"%hostip)
# 打印所有虚拟机wmid号
ALLWMID = "vim-cmd vmsvc/getallvms | awk '{print $1,$2}'"
# 执行变量命令
ssh.exec_command(ALLWMID)
# stdout 为正确输出,stderr为错误输出
stdin, stdout, stderr = ssh.exec_command(ALLWMID)
# 输出命令执行结果
result = stdout.read()
# 将types转为str,并将输出结果自动换行打印
result = result.decode('UTF-8').replace('', '')
# 打印输出结果
print(result)
WMID = input("请输入需要操作的虚拟机wmid:")
NUM = input("操作选项列表:\n0.查看状态\n1.开机\n2.关机\n请输入需要执行的选项:")
if NUM == str(0):
STATUS = "vim-cmd vmsvc/power.getstate %s"
ssh.exec_command(STATUS)
stdin, stdout, stderr = ssh.exec_command(STATUS % WMID)
result = stdout.read()
result = result.decode('UTF-8').replace('', '')
print("该虚拟机状态如下:\n%s" % result)
elif NUM == str(1):
ssh.exec_command("vim-cmd vmsvc/power.on %s" % WMID)
print("%s已开机"% WMID)
elif NUM == str(2):
ssh.exec_command("vim-cmd vmsvc/power.shutdown %s"% WMID)
print("%s已关机"% WMID)
else:
print("输入有误,请重新输入选项!")
print("正在重新连接中...")
except Exception as e:
print("连接失败请联系管理员")
if __name__ == '__main__':
# 循环运行
while 1:
run()
以下是运行结果测试:
运行开机后电源状态
使用pyinstaller打包后程序大小为7.48MB
感谢分享,ESXi 我前几天帮朋友弄的时候遇到过一个问题,有一台虚拟机在停电之后突然进不了桌面了,新建的虚拟机授予账号之后也进不了桌面,报错,不知道什么原因,不知道你遇到过没有 cuv.cc 发表于 2022-9-6 11:51
感谢分享,ESXi 我前几天帮朋友弄的时候遇到过一个问题,有一台虚拟机在停电之后突然进不了桌面了,新建的 ...
没有,开不了机得话是遇到过,修复一下就行 成品没有吗 败笔网络 发表于 2022-6-23 15:39
成品没有吗
拿源码直接编译就可以了,这里好像不允许发成品
nice; thank you for sharing; 或往后会用; {:301_1003:} 有编译的成品嘛?求个 败笔网络 发表于 2022-6-23 15:39
成品没有吗
https://wwu.lanzouf.com/i6ysD06voruj wa0lchenxisxa 发表于 2022-6-24 15:25
有编译的成品嘛?求个
https://wwu.lanzouf.com/i6ysD06voruj 需要exsi开启ssh功能才能使用吗
页:
[1]
2