Python 通过pyVmomi获取vmId

Python 通过pyVmomi获取vmId,python,vmware,vmware-tools,pyvmomi,Python,Vmware,Vmware Tools,Pyvmomi,目前,我正在使用vim cmd在我的VMware center中执行多个操作 我正在使用SSH paramiko模块连接并检索vim cmd命令状态: vim-cmd vmsvc/getallvms vim-cmd vmsvc/power.getstate 13 vim-cmd vmsvc/power.on 13 vim-cmd vmsvc/power.off 13 vim-cmd vmsvc/destroy 13 我想使用pyVmomi库运行一些命令,为此需要提供vmId标识符: from

目前,我正在使用vim cmd在我的VMware center中执行多个操作

我正在使用SSH paramiko模块连接并检索vim cmd命令状态:

vim-cmd vmsvc/getallvms
vim-cmd vmsvc/power.getstate 13
vim-cmd vmsvc/power.on 13
vim-cmd vmsvc/power.off 13
vim-cmd vmsvc/destroy 13
我想使用pyVmomi库运行一些命令,为此需要提供vmId标识符:

from pyvim import connect
from pyVmomi import vim
from pyVmomi import vmodl

vim-cmd vmsvc/get.summary 13
Listsummary:

(vim.vm.Summary) {
   dynamicType = <unset>, 
   vm = 'vim.VirtualMachine:13', 

我可以使用什么命令来获取vmId?

在vSphere Web services API的上下文中,您所调用的vmId称为ManagedObjectReference或mor或moref。有了pyVmomi,有两种方法可以获得更多。一种是只打印对象。该方法将以如下格式打印moref,以提供ManagedObjectType:moref。另一种方法是,如果您只想获得实际的虚拟机访问量。\u moId。下面是使用数据中心对象的示例

from pyVim.connect import SmartConnect
from pyVmomi import vim
si = SmartConnect(host='10.12.254.137', user='administrator@vsphere.local', pwd='password')
content = si.RetrieveContent()
children = content.rootFolder.childEntity
for child in children:
    print child

'vim.Datacenter:datacenter-33'
'vim.Datacenter:datacenter-2'
children[0].name
'1000110'
dc = vim.Datacenter('datacenter-33')
dc._stub = si._stub
dc.name
'1000110'

如果您想使用对象的moref访问对象,请遵循我提供的示例。大约一年前,我在我的博客上谈到了这一点。您可以查看该文章以获得更深入的解释。

您所调用的vmid称为ManagedObjectReference或mor,或vSphere Web services API上下文中的moref。有了pyVmomi,有两种方法可以获得更多。一种是只打印对象。该方法将以如下格式打印moref,以提供ManagedObjectType:moref。另一种方法是,如果您只想获得实际的虚拟机访问量。\u moId。下面是使用数据中心对象的示例

from pyVim.connect import SmartConnect
from pyVmomi import vim
si = SmartConnect(host='10.12.254.137', user='administrator@vsphere.local', pwd='password')
content = si.RetrieveContent()
children = content.rootFolder.childEntity
for child in children:
    print child

'vim.Datacenter:datacenter-33'
'vim.Datacenter:datacenter-2'
children[0].name
'1000110'
dc = vim.Datacenter('datacenter-33')
dc._stub = si._stub
dc.name
'1000110'

如果您想使用对象的moref访问对象,请遵循我提供的示例。大约一年前,我在我的博客上谈到了这一点。您可以查看那篇文章以获得更深入的解释。

我也遇到过同样的问题, 我知道已经有一段时间了,但我建议这样做 对我来说很好用的hack,我希望你能使用它

比如说

vim.VirtualMachine:11
现在,我们希望提取数字,对于python3,建议使用正则表达式

import re #regular expression
re.findall('\d+', buf)
结果是一个包含1个元素的列表

‘11’ 类型BUF
我遇到过同样的事情, 我知道已经有一段时间了,但我建议这样做 对我来说很好用的hack,我希望你能使用它

比如说

vim.VirtualMachine:11
现在,我们希望提取数字,对于python3,建议使用正则表达式

import re #regular expression
re.findall('\d+', buf)
结果是一个包含1个元素的列表

‘11’ 类型BUF

我不明白您在这里要求的是什么..我指的是使用vim cmd vmsvc/GetAllVMS获得的ESXi CLI中的vmid我不明白您在这里要求的是什么..我指的是使用vim cmd vmsvc/GetAllVMS获得的ESXi CLI中的vmid此答案的格式很奇怪。你能修改格式,这样就可以清楚地知道配置中会有什么,什么是上下文和注释吗?谢谢,我已经修改了它。这个答案的格式很奇怪。你能修改格式,这样就可以清楚地知道配置中会有什么,什么是上下文和注释吗?谢谢,我已经修改了它。