顧武雄
在計算機系統的世界里,盡管友善的窗口界面設計打敗了以命令操作為主的各類系統,但在企業網絡環境中窗口設計的主要使用對象是一般客戶端,而非IT 單位的信息管理人員。因為對于一位資深的IT 任務者而言,無論后端的操作平臺為何,從過去、現在甚至是未來的網絡世界,命令管理控制臺才是真正掌控IT 整體自動化維運的最佳選擇。憑借本文的指引,讓我們暫時拋開對于VMware vSphere Client的依賴,一同學習如何使用更強大的PowerCLI 命令管理控制臺,來更有效率地管理vSphere 6.0 架構下的虛擬機。

什么是VMware vSphere PowerCLI 呢?簡單來說它就是一個創建在以Windows PowerShell 為基礎的命令管理界面,讓管理人員可以通過內置的400 多個命令工具,來遠程連接管理vSphere 虛擬化環境與VMware vCloud Director。高級者還可以通過其內置手稿的范例程序與函式庫,來創建自動化操作維護程序。
VMware vSphere PowerCLI 6.0 Release 1 主要有以下兩個組件所構成:
1.vSphere PowerCLI 是PowerCLI 程序包的核心組件,它包含了管理vSphere各項命令(cmdlets)功能所需要的模塊與管理單元:
(1)VMware.VimAutomati on.Core:提供有關vSphere環境自動化操作管理命令。
(2)VMware.VimAutomati on.Vds:提供有關vDS(virtual Distributed Switch)與Port Group 管理的命令。
(3)VMware.VimAutomati on.Cis.Core:提供有關vCloud Suite SDK 服務器的管理命令。
(4)VMware.VimAutomati on.Storage:提供有關在vSphere 架構中以策略基礎的存儲管理命令。
(5)VMware.VimAutomati on.HA:提供Get-DRMInfo 命令讓管理人員可以取得針對DRS(Distributed Resource Management)所Dump 出來的信息。
(6)VMware.VimAutomat ion.License:提供Get-Lice nseDataManager 命令來管理有關VMware 授權的組件。
(7)VMware.ImageBuilde r:提供映像設置、depots 以及VIBs 方面的管理命令。
(8)VMware.DeployAutom ation:針對ESXi 軟件與物理主機的配置管理,提供一個命令界面來管理自動化部署操作。
2.vCloudPowerCLI:此為PowerCLI 6.0 安裝時的一個選用組件,主要是針 對vCloud Director 與vCloud Air 的自動化管理功能,提供了VMware.VimAutomation.Cloud 與VMware.VimAutomation.PCloud 兩大模塊與相關命令。
接著就讓我們一同來學習一系列有關于以PowerCLI,遠程連接管理vSphere 虛擬化操作環境的各種技巧吧。
默認當我們安裝vSphere Client 在Windows 計算機時并沒有提供PowerCLI,想要使用它必須自行到VMware 的官方網站上,搜索“PowerCLI”關鍵詞來找到最新版本的下載點。頁面中可以查看到它的程序包大小大約在57MB 左右,請點擊[Download Now]按鈕來下載即可。
以PowerCLI 6.0 Release 1 程序包的安裝需求而言,在服務器類的操作系統部分必須是Windows Server 2008 R2 Service Pack 1 或是Windows Server 2012 R2。在客戶端的操作系統部分則必須是Windows 7 Service Pack 1 或Windows 8.1,且還必須確認已經安裝了Microsoft.NET Framework 4.5 以上版本,然后搭配Windows PowerShell 3.0 或4.0 版本的使用即可。
此外如果您想要執行一些關于Guest 方面的命令,在虛擬機的客體操作系統之中,則必須注意它目前僅支持Windows Server 2008 R2 Service Pack 1(64-bit)與Red Hat Enterprise Linux 5.10(64-bit),且Guest 相關命令的使用目前并不支持IPv6 網絡環境。
在PowerCLI 6.0 的安裝過程中應該會先出現相關提示頁面,請點擊[Install]來完成[VMware Remote Console Plug-in 5.1]程序包的安裝。接著此程序包的瀏覽器附加組件將會啟用在IE、Chrome、Firefox 三種瀏覽器之中。
在開始進入到PowerCLI 6.0 的安裝設置之前,可能會出現有關目前此計算器PowerShell 執行策略設置的警告信息,關于這項問題筆者留待安裝后再來解決。點擊[Continue]。在[Custom Setup]頁面中,可決定是否要加選[vCloud Air/VCD PowerCLI]的命令管理組件,基本上如果您公司沒有在使用此云端服務,便可以使用默認來完成安裝即可。點擊[Next]后再點擊[Install]即可。
完成PowerCLI 6.0 的安裝之后,以Windows 8.1或Windows Server 2012 R2 來說,您將可以在[開始]畫面下的[應用程序]列表中找到它,建議您可以將它固定在[開始畫面]或是[任務欄]之中。首次的執行應該會出現無法加載Initialize-PowerCLIEnviroment.ps1 的錯誤信息,此問題的發生其實就是前面安裝過程中所關聯的警示信息。
我們必須修改PowerShell 的執行策略,不過在修改前可以先執行Get-ExecutionPolicy 命令,來查看目前所應用的執行策略,
在默認的狀態下便是Restricted,您可以根據官方的建議執行Set-ExecutionPolicyRemoteSig ned,來開放遠程已簽署的腳本即可,或者也可以執行Set-ExecutionPolicy -Exec utionPolicy Unrestricted來完全取消執行策略的限制,不過如此一來如果不小心執行到惡意的腳本程序,便會對于系統造成危害。
成功解禁PowerShell執行VMware 腳本的限制之后,您可能會想先知道究竟有哪一些命令可以用來管理VMware vSphere 虛擬化環境。請執行Get-VICommand命令,便會列出vSphere 架構下所有可用的命令清單,每一個命令都有相對應的類型與所屬模塊名稱。
接著讓我們執行第一個最重要的命令,那就是連接到選定的vCenter Server主機。您可以直接執行Connect-VIServer 命令,然后再根據系統提示完成vCenter Server 的IP 地址以及管理員賬號密碼的輸入即可。至于如果您想要使用一串命令完成登錄,則可以直接在命令后面搭配-Server

圖1 查詢特定命令范例
確認連接登錄vCenter Server 之后,您將可以開始進行旗下所有ESXi 主機、數據中心、群集、虛擬機、存儲設備、數據存放區、網絡等管理。然而在可用的命令與用法非常多的情況之下,您似乎不可能記住每一則命令的使用方法,這時候就得仰賴Get-Help 命令的協助,來隨時告訴我們任一個命令完整介紹。例如您只要執行Get-Help Get-VMHost,便可以立即看到關于Get-VMHost 命令的完整說明,但是如果您只是想查看該命令的使用范例,則可以像如圖1 所示一樣搭配-Examples 參數的使用即可。
提 到Get-VMHost,它 可是管理員最常使用的命令之一,單獨的執行下可以知道在目前的vCenter 架構下有哪一些ESXi 主機,且可以查看到每一部主機的IP 地址、連接狀態、電源狀態、CPU數量、CPU 總資源、CPU 使用率、總內存大小、內存使用率以及ESXi 系統板本。另一個常見的用法則是將選定的獨立ESXi 主機納入vCenter 的管理,您只要執行Add-VMHost -Name Host-Location (Get-Datacenter Datacenter) -User root-Password password 命 令格式即可,其中來源的主機名(Host)、root 賬號、密碼以及目的地的數據中心名稱(Datacenter) 必須輸入正確。
在默認的狀態下PowerCLI 所使用命令窗口是傳統的命令行(Cmd),使用其來并沒有先進的Windows PowerShell 窗口來得便利,就以一個最簡單的窗口大小調整,傳統的Cmd 命令提示窗口就顯得相當笨拙,雖然這項設計已知在Windows 10以及Windows Server 2016版本中將獲得大幅改善,但恐怕也得需要PowerCLI 的更新版本來兼容于它們。
在此之前最理想的操作界面肯定是Windows PowerShell。然而當我們直接開啟Windows PowerShell來執行PowerCLI 任何命令時,肯定會出現沒有此命令的錯誤信息,這是因為我們尚未加載它的相關組件,您只要執行 Add-PSSnapinVMware.VimAutomation.Core 與Add-PSSnapinVMware.VimAutomation.Cloud兩個命令即可,其中Add-PSSnapinVMware.VimAutomation.Cloud 命令是選用的組件,也就是用來管理vCloud 的管理單元,必須搭配PowerCLI 的自定義安裝設置才可以,如果不需要,是可以省略的。若是想要查看已成功注冊的管理單元,只要執行Get-PSSnapin-Registered 命令即可。
完成vSphere PowerCLI組件注冊之后,您可以分別執 行Get-Command -Noun VM 與Get-Command -Module VMWare* 兩個命令參數,來查看一下與VM 名詞以及與VMware 模塊有關的命令列表。如果有顯示出像范例中的執行結果,即表示您已經可以在Windows PowerShell中,使用vSphere PowerCLI組件下的各種模塊命令,來遠程連接管理vSphere 所有ESXi 主機與虛擬機。
最后請嘗試執行Connect-VIServer 命令來連接登錄選定的vCenter Server,然后再執行Get-VMHost 與 Get-VM 兩個常用命令,來測試看看是否能夠取得目前所有ESXi 主機以及虛擬機列表。
在PowerCLI 眾多的命令集合中,最常用的肯定是與虛擬機管理有關的命令,其中光是一個Get-VM 命令,就會使用到因應許多不同需要的命令組合。在尚未搭配任何參數時,可以得知在目前vCenter 管轄內的所有需機器清單,并且可以知道每一部虛擬機的電源狀態、配置的CPU 數量以及內存的大小。
當虛擬機數量很多時,您可能只想查看某一部ESXi主機的虛擬機列表,這時候就可以執行Get-VMHost"192.168.7.251" | Get-VM 命令,來取得選定ESXi主機下的虛擬機列表,其中ESXi 主機的表示方式,可以使用IP 地址、主機名或是完整的域名(FQDN)。若是想要查看某一個資源池中的虛擬機清單,則可以執行Get-ResourcePool "測試池" |Get-VM 命令來查詢,其中資源池的名稱即便是以中文命名,一樣可以正常進行各種管理。
對于虛擬機的創建如果以PowerCLI 的命令來執行,肯定會遠比通過vSphere Web Client 界面的操作來得有效率,因為您只要事先準備好下列命令范例,甚至于把它存儲成一個PS1 的手稿程序來執行,就可以大幅節省掉使用鼠標點擊設置的操作時間。在這個范例中除了有選定新虛擬機所有存放的主機位置之外,還特別選定了一個現有的資源池(選用),當然其它像是虛擬機的名稱、虛擬硬盤的大小與格式、數據存放區位置、虛擬內存大小、虛擬CPU 數量以及所使用的虛擬網絡皆是必要的參數設置。

既然能夠以命令參數來創建新虛擬機,當然也就能夠刪除現有已在關機狀態下的任何虛擬機。例如您只要執行Remove-VM CentOS -DeletePermanently 命令參數,來永久刪除一個名為CentOS 的虛擬機以及所屬的虛擬硬盤文件,若想要保留虛擬硬盤文件,則只要拿掉-DeletePermanently 參數即可。至于針對現行虛擬機設置的修改,則可以使用Set-VM 命令來完成,例如您可以執行Get-VM -Location ResourcePool01 | Set-VM-MemoryGB 4 -NumCPU 2,來將ResourcePool01 資源池中的所有虛擬機之內存調整至4GB,以及CPU 數量調整至2 個。
另一種參數的用法則是可以用來篩選特定的字段信息,那就是搭配Select-Object 命令的使用,它可以應用在各種查詢命令的使用,例如您可以執行Get-VM | Select-Object Name,PowerState 命令,即可對于取得的虛擬機列表信息,例如僅顯示名稱以及電源狀態的字段數據。
既然知道了各虛擬機的電源狀態,便可以隨時以命令的執行方式,來對于選定的虛擬機進行關機、暫停以及啟動等操作。例如您想要對一個名為SharePoint的虛擬機進行正常關機,就必須執行Stop-VMGuest SharePoint 命令而不是Stop-VM SharePoint,因 為前者是發送關機命令至客體操作系統,而后者則是直接強迫關機,不過想要讓Stop-VMGuest 的命令能夠成功執行,該虛擬機必須確認已經安裝了VMware Tools 才可以。
至于虛擬機的啟動可以執行Start-VM 命令,而暫停運行并將狀態存儲則可以執行Suspend-VM 命令即可。
此外如果您是剛通過命令方式創建了新虛擬機,并且準備安裝全新的客體操作系統,在啟動虛擬機之前一定要先將ISO 安裝映像檔,掛載至此虛擬機的虛擬光驅連接之中,例如這時候您就可以執行New-CDDrive -VM"Windows 8.1" -ISOPath"[VM-Storage]tw_windows_8_1_enterprise_x64_dvd_2971872.iso" -StartConnected 命令,來將選定的Windows 8.1 安裝映像檔完成掛載與連接。當然前提之下是您已經先將此ISO 文件上傳至所描述的數據存放區之中。
在虛擬機正常運行的過程之中,如果發生了所在的ESXi 主機需要停機維護時,您便須要先將虛擬機遷移至群集中的另一臺ESXi 主機中,然后讓來源的ESXi 主機進入到維護模式后,再完成正常停機即可。此時就得發揮vMotion 的強大功能,讓虛擬機可以在不停機的狀態下,直接在線遷移至另一部ESXi 主機來繼續運行。
下列的命令參數范例,便是將一個名為SharePoint的虛擬機,在線轉移至群集中的另一部ESXi 主機之中。

如果您是打算將此虛擬機在線遷移到特定的資源池,則可以參考以下這個命令范例:

為了方便虛擬機的快速創建,最好的做法就是先將一些常用的Windows 客體操作系統,制作成虛擬機模板,如此一來往后需要同樣客體操作系統版本的新虛擬機,就可以直接使用現行的模板來產生即可,然后在初次的啟動過程中完成計算機名稱以及TCP/IP 地址等設置即可。若是您想知道在目前的vSphere 架構下,有哪一些可用的虛擬機模板,同樣也可以經由命令參數的執行來查詢。
舉例來說如果您想要查詢選定數據中心下,所有以W 為開頭的虛擬機模板清單,只要執行Get-Template-Name W* -Location Datacenter
如果您是想要創建新的虛擬機模板,在選定的數據中心下,執行以下的命令參數,來將現行一個名為SharePoint 的虛擬機,復制一份成為選定數據中心下的VMTemplate01 模板。
New-Template -VM SharePoint -Name VMTemplate01 -Location(Get-Datacenter Datacenter)
未來如果需要將此虛擬機模板徹底移除掉,只要執行以下命令參數范例即可。
Remove-Template-Template "VMTemplate01"-DeletePermanently
此外您也可以選擇將選定的VMTemplate01 虛擬機模板,轉換成正式運行的VM01 虛擬機,只要執行Get-Template VMTemplate01 |Set-Template -ToVM -Name VM01 命令參數即可。相反的如果是要將一個名為SharePoint 的虛擬機,轉換成名為VMTemplate01的虛擬機模板,則可以執行Set-VM -VM SharePoint-ToTemplate -Name"VMTemplate01"命令參數。
不過必須注意的是這樣的做法,將會使原有的SharePoint 虛擬機消失掉,因為已經被轉換成模板了。
您可以執行以下命令,來為一個名為SharePoint的虛擬機,添加一個名為"Snapshot001" 的快照與描述說明。

當然您也可以針對選定的ESXi 主機或是資源池,批量完成旗下所有虛擬機的快創建,下列范例便是對于一個名為“測試用池”的資源池,在取得所有虛擬機清單的同時,為它們皆創建一個名為“Snapshot001”的快照。

說到虛擬機的快照文件,當數量一多時它們還真是蠻占用存儲空間的,這時候您可能就需要清除一些舊的快照。可參考執行下列命令范例,來將SharePoint 這個虛擬機中的第一個快照進行刪除。當然您也可以一次批量刪除選定資源池或主機中的快照,只要它們皆使用了相同的快照名稱即可。


盡管虛擬機快照功能并不適合用來作為備份用途,但對于重要的系統狀態存儲卻是非常好用,因為它神速般的還原機制可不是任何備份軟件所能取代。

同樣的我們也可以將選定池的所有虛擬機全部皆還原選定的快照備份,您可以參考以下范例。

許多時候我們對于大量虛擬機的管理,需要先了解這一些虛擬機客體操作系統的詳細信息,或是關于VMware Tools 的版本信息,因為許多與應用程序的大量部署或系統集成方面的管理,都要求必須事先調查好這一些相關信息,以避免在部署操作的過程之中發生錯誤。首先可以通過執行Get-VM | Get-VMGuest 的命令,來取得目前所有虛擬機的客體操作系統版本信息,而且也可以知道它們的IP 地址。在此您可能會發現為何有一些客體操作系統的IP 地址沒有出現,其實這是因為這一些虛擬機目前尚未啟動所致。
取得上述客體操作系統一般信息,對于許多應用程序的大量部署應該已經足夠,但可能無法滿足一些高級代理程序的部署需要,例如某一些第三方的資產管理系統或服務監控系統。這時候您可以執行Get-VMGues Ubuntu-VM | fc | more,來取得這一個名為Ubuntu-VM的客體操作系統完整信息,這里頭將會清楚程列出它的計算機名稱、IP 地址(包括IPv6)、Mac 地址、硬盤空間信息、虛擬機ID、使用的虛擬網絡界面,以及是否啟用了網絡喚醒功能等等。
接著如果您是想要取得所有虛擬機的VMware Tools版本信息與狀態,可以參考下列命令范例。執行后就可以從[版本狀態]字段之中,知道哪一些虛擬機是尚未受到管理的,以及哪一些已是最新或是已過期的VMware Tools 版本。

上述的范例并沒有設置過濾特定的條件,而以下命令與參數范例,則是添加了Where-Object 敘述,來唯一取得需要更新VMware Tools版本的虛擬機清單,也就是工具狀態是“ToolsOld”。當然您也可以改使用工具版本狀態的域值來判斷。

數據存放的管理在虛擬化平臺上是相當重要的一環,因為若是無法徹底掌控,影響的層面不僅是存儲空間吃緊的問題,更會進一步讓I/O 運行的性能大打折扣,尤其是在企業級SSD 的存儲架構之下更是顯著。因此我們首先第一步必須先清楚所有虛擬硬盤的分布情況,您可以像如圖2 所示一樣,執行以下命令范例來檢視選定數據存放區中的虛擬硬盤清單,藉此可以掌握到每一個虛擬硬盤所屬的虛擬機,以及所設置的容量大小與類型。值得注意的是其中的-DatastorePath 參數,除了需要選定數據存放區名稱之外,還有選定完整的目錄路徑,例如您可以選定"[VM-Storage]VMDKs/SharePoint/"


確實掌握了每一個虛擬機硬盤的位置、大小以及類型之后,對于虛擬機的管理,您可能隨時會需要對于某一個或特定主機或所有虛擬機,來添加一個選定大小的虛擬硬盤,這時候就可以先設置好一個存儲虛擬機列表信息的變量,然后再搭配使用New-HardDisk 命令以及相關參數,讓所取得的虛擬機清單一次完成虛擬硬盤的添加。

圖2 取得選定存放區的虛擬硬盤清單
既然可以一次幫多個虛擬機批量完成虛擬硬盤的添加,當然也就能夠一次幫多個虛擬機批量移除掉選定的虛擬硬盤。每一個虛擬硬盤的移除皆會出現確認提示,如果想要直接一次完成全部的刪除操作,只要輸入A 即可。

至于如果想要批量復制多個虛擬機的硬盤文件到選定的數據存放區路徑下,可以參考這個Get-HardDisk-VM $vm | Copy-HardDisk"[ VM-Storage]/"命令范例的使用。
如果虛擬機硬盤的批量容量修改,則可以參考這個Get-HardDisk -VM $vm |Set-HardDisk -CapacityGB 60 命令范例。
Virtual SAN 相關命令:針對新版Virtual SAN 6.0 與其相關磁盤的管理操作,目前已可以通過Get-VsanDisk、Get-VsanDiskGroup、New-VsanDisk、New-VsanDiskGroup、Remove-VsanDisk、Remove-VsanDiskGroup 六大命令與相關參數的搭配使用來完成設置。未來版本的PowerCLI 將不再繼續提供的命令有Get-VMGuestNetworkInterface、Set-VMGuestNetworkInterface、Get-VMGuestRoute、Remove-VMGuestRoute。
未來不管VMware vSphere 會持續發展到哪一個版本,相信PowerCLI 工具的版本也同樣會一直往上發展,因為即便架構再大再復雜的vSphere 虛擬化環境,對于一位熟悉PowerCLI 的系統管理人員來說,只要事先寫好因應各種管理需要的Script,就能夠輕松處理好平日各種維運上的疑難雜癥,一點也不會受到架構規模大小的影響。進一步甚至于可以結合Window PowerShell 的使用,一并解決Active Directory集成管理需求,以及所有運行中的Windows Server客體操作系統的自動化維運任務。別再遲疑了,趕緊動手來學習吧!