2012-09-07 70 views

回答

4

發現這個在其他網站上。似乎必須先設置值才能查詢它們。

在某些情況下,您想要從VM的操作系統內確定VM的vCenter diaply名稱。

如果從系統預配模板克隆多個虛擬桌面以啓用將計算機名稱設置爲與vCenter顯示名稱相同的選項,這可能很有用。它在許多其他情況下也可能有用。

但是,默認情況下,無法使用安裝在虛擬機中的標準VM工具執行此操作。

雖然可以在vCenter中的VM對象上設置自定義屬性,然後從虛擬機的操作系統內查詢該屬性。

下面的腳本可以使用vSphere PowerCLI的設置自定義屬性是相同的vCenter顯示名稱運行:

$vServer= 「vCenter.server.fqdn」 
$vmName = 「VM display name」 

If (-not (Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue)) { 
Add-PSSnapin VMware.VimAutomation.Core 
} 

Connect-VIServer $vServer | out-null 

$vmSet = GET-VM $vmName | Get-View 
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec 
$gInfo = New-Object VMware.Vim.optionvalue 
$ginfo.Key=」guestinfo.hostname」 
$gInfo.Value=$vmSet.Name 
$vmConfigSpec.extraconfig += $gInfo 
$vmSet.ReconfigVM($vmConfigSpec) 

Disconnect-VIServer $vServer -Confirm:$false | out-null 

一旦設定,就可以在虛擬機中進行查詢使用VM工具和下面的命令:

vmtoolsd.exe –cmd 「info-get guestinfo.hostname」 

這當然可以,被添加到腳本來設置對多臺計算機此屬性。

Credit寄給Richard Parmiter! http://www.parmiter.com/vmware/2012/10/RP781

6

我使用VMware的pyVmomi模塊在我的Linux客戶操作系統上通過Python腳本執行此操作。

首先,我通過讀取系統文件/sys/devices/virtual/dmi/id/product_uuid來檢索系統UUID。然後,我根據pyvmomi-community-samples sitefind_by_uuid.py示例,通過UUID在vCenter服務器上搜索虛擬機。另一種選擇是通過IP地址進行訪問,這將更加平臺無關。 pyVmomi模塊提供了一種使用此方法的FindByIp()方法。

#!/usr/bin/env python 
import atexit 
import pyVmomi 
from pyVmomi import vim, vmodl 
from pyVim.connect import SmartConnect, Disconnect 

si = SmartConnect(host='<host>', port='<port>', user='<user>', pwd='<password>') 
atexit.register(Disconnect, si) 
file = open('/sys/devices/virtual/dmi/id/product_uuid') 
uuid = file.read().strip().lower() 
file.close() 

search_index = si.content.searchIndex 
vm = search_index.FindByUuid(None, uuid, True, False) 
#Alternatively: vm = search_index.FindByIp(None, <ip_address>, True) 
print vm.summary.config.name 

一旦你的虛擬機的名稱,您可以使用客戶機操作系統的命令(例如hostname)進行重命名。

+1

+1,但我發現在VMware Workstation上,這隻有在UUID全小寫時纔有效。我提交了一個修改來解決問題。謝謝! – mpontillo

+0

爲我工作。 - 爲此非常感謝!! Thas正是我正在尋找的東西,本地在Python上與Linux。 – esha