吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3370|回复: 12
收起左侧

[Python 转载] Python写一个Esxi服务器便携开关虚拟机与查看电源状态的程序

[复制链接]
你怎么长不高啊 发表于 2022-6-23 14:45
本帖最后由 你怎么长不高啊 于 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()



以下是运行结果测试:
image.png

image.png
image.png
运行开机后电源状态
image.png
使用pyinstaller打包后程序大小为7.48MB
image.png


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cuv.cc 发表于 2022-9-6 11:51
感谢分享,ESXi 我前几天帮朋友弄的时候遇到过一个问题,有一台虚拟机在停电之后突然进不了桌面了,新建的虚拟机授予账号之后也进不了桌面,报错,不知道什么原因,不知道你遇到过没有
 楼主| 你怎么长不高啊 发表于 2022-9-7 10:20
cuv.cc 发表于 2022-9-6 11:51
感谢分享,ESXi 我前几天帮朋友弄的时候遇到过一个问题,有一台虚拟机在停电之后突然进不了桌面了,新建的 ...

没有,开不了机得话是遇到过,修复一下就行
败笔网络 发表于 2022-6-23 15:39
 楼主| 你怎么长不高啊 发表于 2022-6-24 00:03

拿源码直接编译就可以了,这里好像不允许发成品

bwuaich 发表于 2022-6-24 11:43
nice; thank you for sharing; 或往后会用;
wa0lchenxisxa 发表于 2022-6-24 15:25
有编译的成品嘛?求个
 楼主| 你怎么长不高啊 发表于 2022-6-24 16:17
 楼主| 你怎么长不高啊 发表于 2022-6-24 16:18
xpeng86 发表于 2022-9-7 17:23
需要exsi开启ssh功能才能使用吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-18 18:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表