好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 你怎么长不高啊 于 2022-6-23 14:53 编辑
因自己有一台ESXI7服务器,直通了独显和usb给win11连显示器输出做HTPC主机,
每次想把黑群晖或者其他win或linux虚拟机开关机的时候就需要登入WEB后台,
或者使用VMware客户端进行操作,觉得有点麻烦不够便利,于是自己写了个很简易的程序。
这个程序好像也没什么用处,但是自己觉得方便了一些,但是同理可以修改一下作为远程linux实现需要的操作用途。
开启SSH服务,用命令正常关机虚拟机大概有两种方式(需要先给虚拟机安装vmwaretools工具):
IDA Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace">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模块,全部代码如下:
[Python] 纯文本查看 复制代码 #-*- 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
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|