活用PowerCLI命令工具 強悍高效管理vSphere

vSphere的虛擬化平台管理儘管已經有設計相當友善的vSphere Client與ESXi Host Client,但對於需要管理大量虛擬機器的進階管理員來說,仍然必須懂得善用最強大的命令工具PowerCLI來輕鬆搞定虛擬機器的新增、修改、移除、移轉、快照以及Guest OS等等的任務管理。

在以實體主機運行為主的IT年代,幾乎是一台伺服器負責運行一套應用系統,不僅部署成本昂貴,就連平日的維運也相當不便。其實一台實體主機所能夠利用的資源相當充沛,許多應用系統往往使用不到一半的資源,其中又以CPU最為常見,也因為如此才有後來的多核心基礎架構來搭配虛擬化平台的資源分配。

現今的IT基礎架構已是虛擬化平台為主,除了有多核心CPU可以充分利用外,還有成本低廉的大容量記憶體與儲存設備可以配置,可以讓許多大型的應用系統拓樸架構,細分更多的伺服器角色至不同的虛擬機器運行,藉此提升整體運行的效能並降低單一點節點故障的風險。

在擁有充沛資源的虛擬化平台架構之下,IT部門肯定會想要充分利用這些資源來部署更多虛擬機器,因此除了一些關鍵的應用系統如ERP、MRP、HRM、BPM、CRM、KM、EIP外,對於各部門所須使用到的各種小型應用系統,以及委外廠商的PoC(Proof of Concept)測試環境、IT部門研發中的測試環境等等,只要資源妥善分配,通通都可以部署在虛擬化平台架構中。

在vSphere的架構中,想要集中控管資源的分配相當容易,只要因應不同應用系統的運行需求,就可以選擇性地將這一些相關的虛擬機器,部署在獨立主機、叢集、資源集區或是vSAN中,並且還能夠在結合DRS的功能下,讓系統自動根據資源的利用狀況,動態調配虛擬機器所在的運行主機。

面對大量虛擬機器的建置與管理,如果只有圖形管理介面肯定是不夠的,因此必須搭配使用命令管理工具來協助執行各種的批次任務,甚至建立自定義的Script來執行各種自動化的任務。目前vSphere主要提供以下三種命令工具,其中最常使用的就是PowerCLI,它也是接下來要實戰講解的重點:

‧DCLI(Datacenter Command-Line Interface):這是一個用於連線管理vCenter Server的命令工具,可以執行各種vSphere Automation API的操作。 ‧ESXCLI:這是一個用於管理ESXi主機的命令工具,可以用來執行各種主機層級的配置和相關任務。 ‧PowerCLI:這是一個基於Windows PowerShell的模組,它內建了超過800個Cmdlet,除了用來管理vSphere架構下的ESXi主機、虛擬機器、叢集、儲存、網路等配置與相關任務外,也能用於管理vSAN、NSX-T、VMware Cloud Services。

安裝與使用PowerCLI

打從Windows 10版本開始,PowerShell便已成為主要的命令介面,正式結束了過去已被使用超過二十年的DOS命令介面。強大的PowerShell不僅可以用來管理本機作業系統中的所有配置,就連Microsoft自家的產品像是Windows Server、Active Directory、Exchange Server、SharePoint Server等等,都可以在一個命令介面中完成各種批次任務的執行。

vSphere也有自家專用且功能強大的PowerCLI模組,可直接在Windows PowerShell中完成安裝與使用。想要安裝最新版本的PowerCLI模組,執行「Install-Module -Name VMware.PowerCLI -AllowClobber」命令,即可下載及安裝最新的版本。若要安裝指定的版本,只要如圖1所示加入-RequireVersion參數並輸入版號即可。

圖1  安裝指定版本。

完成PowerCLI模組的安裝後,未來如果想要更新至最新版本,只須執行「Update-Module -Name VMware.PowerCLI」命令。倘若需要將PowerCLI模組強制移除,則執行「Uninstall-Module -Name VMware.PowerCLI -Force」命令。

基本上,只要完成安裝PowerCLI模組,就可以在PowerShell介面中開始使用PowerCLI的相關命令參數來管理整個vSphere的運行。不過,開始之前建議最好先完成以下兩個設定,以避免系統在連線登入與使用的過程中,出現不必要的訊息提示。

首先,如圖2所示執行以下的命令讓PowerCLI在每一次連線登入vCenter Server時不再出現憑證的警示訊息:

圖2  設定略過憑證警示。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

緊接著,進一步執行以下命令,選擇加入VMware產品的體驗計畫,其中-ParticipateInCEIP的參數值若改為$false,則表示不加入這項計畫。無論如何,建議在開始使用PowerCLI之前就先完成此項設定,以免在正式使用的過程中出現相關的提示訊息:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true

接下來,學習使用PowerCLI連線登入vCenter Server的方法。第一種做法是直接執行「Connect-VIServer」,此時命令提示字元會要求輸入vCenter Server的位址。完成輸入並連續按下〔Enter〕鍵後,將會出現如圖3所示的「Specify Credential」視窗,輸入帳號與密碼後按下〔OK〕按鈕,即可登入。

圖3  帳號密碼提示視窗。

如果希望能在一次命令參數的執行中,就完成輸入連線位址、帳號以及密碼,則可參考如圖4所示的以下命令執行。在這個範例中,若選擇不輸入-User與-Password參數,系統將會自動出現上一個步驟中的「Specify Credential」視窗,來要求完成帳號與密碼的輸入:

圖4  連線登入vCenter Server。

Connect-VIServer -Server vcsa01. lab02.com -User administrator@lab02. com -Password 12@AcEBCD

還記得先前曾經示範過在vSphere Client登入頁面,選擇使用Windows驗證的方式來完成登入。實際上,只要預先完成Active Directory的連接設定,即便在Windows PowerShell命令介面中,一樣可以讓PowerCLI使用Windows驗證的方式來完成登入。

如圖5所示,在此執行「Connect-VIServer」命令後,僅輸入了vCenter Server的位址便自動完成了登入。在登入結果中可以發現,系統自動使用了現行的Active Directory帳號完成登入動作。

圖5  整合Active Directory驗證登入。

成功以PowerCLI登入vCenter Server後,對於vSphere新手而言,最困擾的肯定是各種命令與參數的用法,如何快速進行查詢與使用,以便讓各種批次任務的執行更有效率。在此提供兩個方法,讓新手們都能夠快速找到各種命令與範例的使用說明。

第一個方法是直接在PowerShell命令介面,針對所要查詢的任何命令,透過Get-Help來取得相關命令參數的用法。如圖6所示,若是執行「Get-Help Connect-VIServer -Example」命令,即表示僅查看Connect-VIServer命令的使用範例。如果想要查看有關此命令的所有參數說明與範例,則改為執行「Get-Help Connect-VIServer -Full」命令。

圖6  查詢命令範例。

上述的方法是針對任何已知的命令查詢使用說明,至於另一個方法,則是針對完全不知道應該執行什麼命令進行管理的IT人員。方法很簡單,只要善用現今最火紅的AI聊天機器人即可,不過要示範的可不是ChatGPT,而是能力更為強大的Bing Chat。

由於Bing Chat是Microsoft自家原生的產品,因此可以直接在Skype中啟用,或是在Edge網頁瀏覽器內使用。在如圖7所示的範例中,便是直接使用Skype介面中的Bing Chat。在此輸入「如何使用PowerCLI命令幫指定的虛擬機器掛載ISO檔案」,結果Bing Chat正確回應了兩種命令範例說明。

圖7  Bing Chat查詢命令用法。

使用Bing Chat或其他AI聊天機器人來查詢PowerCLI的命令用法雖然方便,但發生錯誤說明的機率也挺高的,主要原因便在於PowerCLI模組的更新,可能有一些命令或參數已經不再支援,導致AI仍回應了已不再支援的舊版命令或參數用法。此外,AI也有可能誤解了問題,造成牛頭不對馬嘴的情況發生。

新增一台虛擬機器

在vSphere管理中想要快速新增虛擬機器,無論單台還是一次多台的虛擬機器新增,最佳的做法肯定是透過PowerCLI而非vSphere Client,因為只要把合乎需求的命令與參數建立好,往後對於虛擬機器的新增,只要修改這個腳本(Script)來執行即可。

如圖8所示的範例是一個常見的新增虛擬機器命令,其中的參數設定包括指定資源集區、磁碟大小、磁碟類型、資料存放區名稱、記憶體大小、CPU數量、網路名稱:

圖8  新增虛擬機器至資源集區。

New-VM -Name "VM01" -ResourcePool "RP-QC" -DiskGB 100 -DiskStorage Format Thin -DataStore iSCSIDatastore01 -MemoryGB 4 -NumCpu 2 -NetworkName "VM Network"

若要將此虛擬機器新增到選定的ESXi主機,可以將-ResourcePool參數拿掉,改成使用-VMHost參數來設定ESXi主機。當然,以上這兩個參數設定也可以一起使用。

完成虛擬機器的新增後,若想要查詢在這個資源集區中有哪一些虛擬機器,可透過執行以下命令參數來得知:

Get-ResourcePool -Name "RP-QC" | Get-VM

對於上述範例中所新增的虛擬機器,可能需要掛載ISO映像以便開始安裝Guest OS。如圖9所示,參考以下的命令範例,便是將指定資料存放區路徑中的ISO檔案,設定在虛擬機器啟動時自動完成掛載:

圖9  掛載ISO映像。

New-CDDrive -VM "VM01" -ISOPath "[iSCSIDatastore01] ISO/Windows Server/SERVER_EVAL_x64FRE_en-us. iso" -StartConnected

既然能夠以命令參數方式來建立新虛擬機器,當然也就能夠刪除現有已在關機狀態下的任何虛擬機器。例如執行「Remove-VM -Name "VM01" -DeletePermanently」命令參數,永久刪除一個名為VM01的虛擬機器以及所屬的虛擬硬碟檔案,若想要保留虛擬硬碟檔案,則只要拿掉–DeletePermanently參數即可。

虛擬機器範本管理

為了方便虛擬機器的快速建立,最好的做法就是先將一些常用的客體作業系統製作成虛擬機器範本,例如將Windows Client、Windows Server以及Linux皆製作好一個虛擬機器範本,如此一來,往後需要同樣客體作業系統版本的新虛擬機器,就可以直接使用現行的範本來產生。

建立虛擬機器範本的最佳做法,是將現行的虛擬機器複製或轉換成虛擬機器範本。如圖10所示,便是透過以下的命令將VM01這台虛擬機器複製成一個名為Windows Server 2022 Template的虛擬機器範本:

圖10  新增虛擬機器範本。

New-Template -VM VM01 -Name "Windows Server 2022 Template" -Location (Get-Datacenter Datacenter)

若是要上述的VM01虛擬機器「轉換」成名為Windows Server 2022 Template的虛擬機器範本,可以執行以下的命令來完成。轉換成功之後,原有的VM01便不存在了:

Set-VM -VM VM01 -ToTemplate -Name "Windows Server 2022 Template"

也可以反過來將指定的Windows Server 2022 Template虛擬機器範本,轉換成正式運行的VM05虛擬機器,只要執行以下的命令即可:

Get-Template "Windows Server 2022 Template" | Set-Template -ToVM -Name VM05

此外,若想要查詢在指定資料中心之下,所有以W字母開頭的虛擬機器範本清單,則執行「Get-Template -Name W* -Location Datacenter」命令。

如果需要永久刪除一個名為Windows Server 2022 Template的虛擬機器範本,可參考以下的命令範例:

Remove-Template -Template "Windows Server 2022 Template" -DeletePermanently

虛擬機器自訂規格管理

對於虛擬機器數量不多的中小企業而言,只要善用虛擬機器範本功能,就可以讓IT人員隨時隨地輕鬆地完成虛擬機器的新增,因為透過虛擬機器範本所新增的虛擬機器,只要在Guest OS啟動後再自行手動完成電腦名稱、IP位址的修改即可。

可是對大型企業的IT來說,往往需要同時新增的虛擬機器數量相當多,若要再自行手動完成每一台虛擬機器的電腦名稱修改、IP位址設定、加入Active Directory等操作,肯定無法真正減輕IT人員的負擔。此刻就必須進一步結合虛擬機器自訂規格功能,讓大量部署後的每一台虛擬機器自動依據選定的規格來完成Guest OS中的各項系統配置。

如圖11所示,在以下的命令範例中,便是透過New-OSCustomizationSpec的相關命令參數,來完成一個名為WinSpec01自訂規格的建立,其設定依序包括Guest OS的完整用戶名稱、組織名稱、啟用SID變更功能、本機管理員帳號與密碼、時區、產品金鑰、網域名稱、網域管理員帳號與密碼:

圖11  新增虛擬機器自訂規格。

$Spec = New-OSCustomizationSpec -OSType Windows -Name WinSpec01 -FullName Lab02User -OrgName LAB02 -ChangeSid -AdminPassword 12@AcEBCD -TimeZone Taipei -ProductKey AXXXX- BXXXX-CXXXX-DXXXX-EXXXX -Domain ADLab02 -DomainUsername Administrator -DomainPassword 12@AcEBCD

完成上述WinSpec01的虛擬機器自訂規格新增後,往後若想要查看關於此自訂規格的屬性,只要執行「Get-OSCustomizationSpec -Name WinSpec01 | FL」命令即可完整呈列。

在上述的虛擬機器自訂規格設定範例中,並未包括所有可用的參數設定。若想加入電腦名稱的命名設定,可以搭配-NamingScheme與-NamingPrefix參數。如果Guest OS的類型是選擇使用Linux,則還可以進一步搭配-DnsServer、 -DnsSuffix、-CustomizationScript參數設定。

如同虛擬機器範本,建議陸續完成Windows Client、Windows Server以及Linux的虛擬機器自訂規格。若想要知道目前已經建立了哪些自訂規格,則如圖12所示執行「Get-OSCustomizationSpec」命令即可。對於不會再使用到的自訂規格(例如WinSpec01),可執行「Remove-OSCustomizationSpec WinSpec01」命令將其移除。

圖12  移除虛擬機器自訂規格。

結合CSV新增大量虛擬機器

想要新增大量虛擬機器的方法有很多種,像是自行撰寫一個Script或直接在命令參數中善用foreach {}迴圈命令來完成。如果已經預先建立好虛擬機器範本以及客體作業系統的自訂規格,那麼做法將會變得更加簡單,只要透過以下命令範例,就可以快速地完成一個虛擬機器的新增,若是將這個命令參數複製多筆至Script之中,然後完成虛擬機器名稱的修改再來執行,便可以一次完成大量虛擬機器的建立作業:

New-vm -vmhost esxi01.lab01. com -Name VM01 -Template Windows Server 2022 Template -Datastore NFSDatastore -OSCustomizationspec Windows Server 2022 Spec

上述的做法雖然簡單但是不易於維護,因此最好能夠進一步搭配CSV檔案來使用,如此一來,就可以讓所有欲建立的虛擬機器清單,通通描述在這個CSV的檔案內,然後再透過New-VM命令來讀取這個CSV檔案的相關欄位設定。

依序輸入下列的變數設定以及執行命令參數,其中在New-VM命令之後的參數,便是用來指定對應的CSV檔欄位名稱,包括新虛擬機器名稱、虛擬機器範本、ESXi主機、CPU數量、記憶體大小、資料存放區、客體作業系統的自訂規格。一旦成功執行後,將可以看到新增的虛擬機器清單:

$CSV = "C:\VMList.csv"   $VirtualMachines=Import-CSV $CSV $VirtualMachines | %{ New-VM -Name $_.VMName -Template $(Get-Template $_.Template) -VMHost $(Get-VMHost $_.VMHost) -NumCpu $_. NumCpu -MemoryGB $_. MemoryGB -Datastore $(Get-Datastore $_.Datastore) -OSCustomizationSpec $(Get-OSCustomizationSpec $_.OSCustomizationSpec)}

結合XML新增大量虛擬機器

在前面的介紹中,透過結合CSV檔案的方式,完成了虛擬機器的批次新增。接下來所要介紹的方法,則是改為結合XML檔案來完成,雖然在做法上有些不一樣,但使用起來卻是一樣簡單方便。

首先開啟Notepad編輯軟體,然後以XML標籤方式設定好每一個虛擬機器的名稱(Name)、CPU數量(NumCPU)、記憶體大小(MemoryGB)、磁碟大小(DiskGB)、網路名稱(NetworkName)、資源集區(ResourcePool)等參數。這些參數的名稱可以自定義,只要能夠符合接下來命令的參數設定即可。

最後依序執行下列的命令參數,即可完成虛擬機器的建立。必須注意的是,其中每一個參數所對應的標籤名稱,必須與XML的描述相符才行,至於XML的檔案名稱變數設定必須輸入實際使用的檔案名稱:

[xml]$s = Get-Content myVM.xml   $s.CreateVM.VM | where { New- VM -VMHost 192.168.7.253 -Name $_.Name -NumCPU $_.NumCPU -MemoryGB $_.MemoryGB -DiskGB $_.DiskGB -NetworkName $_.NetworkName} -ResourcePool $_. ResourcePool

虛擬磁碟管理

虛擬機器在上線使用一段時間後,難免會需要新增虛擬磁碟或是擴增虛擬磁碟大小,以便存放更多的檔案資料。

當有多台的虛擬機器需要同時新增虛擬磁碟時,如圖13所示,善用以下的命令範例將可以輕鬆完成。在這個範例中,分別在VM01與Storage01的虛擬機器中,皆新增了一個20GB的虛擬磁碟。此虛擬磁碟檔案將會自動儲存在與虛擬機器相同的資料存放區中:

圖13  新增虛擬硬碟。

$vm=Get-VM -Name VM01,Storage01 $vm | New-HardDisk -CapacityGB 20 -Persistence persistent

針對這個命令的參數設定範例,如果需要自定義虛擬磁碟檔案的資料存放區,可以搭配-Datastore參數設定。若要設定磁碟格式,則搭配-StorageFormat參數,其中可用參數設定分別有Thin、Thick、EagerZeroedThick。至於如果是要掛接現行的虛擬磁碟檔案,則可搭配-DiskPath參數來設定檔案的存放路徑。

接下來,示範如何擴充虛擬磁碟的大小。首先,如圖14所示執行以下命令。此命令參數便是用來查看NFSDatastore資料存放區路徑下的VM01_1.vmdk虛擬磁碟資訊,可以發現這個虛擬磁碟目前的大小是20GB:

圖14  擴充虛擬磁碟。

Get-HardDisk -Datastore "NFSDatastore" -DatastorePath "[NFSDatastore] VM01/ VM01_1.vmdk"

緊接著,透過以下命令將VM01_1.vmdk這個虛擬磁碟大小擴充至22GB。必須注意的是,虛擬磁碟的大小設定只能擴充而不能縮減,否則執行後將會出現「A specified parameter was not correct」的錯誤訊息:

Get-HardDisk -Datastore "NFSDatastore" -DatastorePath "[NFSDatastore] VM01/VM01_1.vmdk" | Set-HardDisk -CapacityGB 22

對於虛擬磁碟的管理,除了可以新增與擴充外,當然也可以進行移除。當虛擬機器中有配置多個虛擬磁碟,要如何透過PowerCLI命令來移除選定的虛擬磁碟呢?很簡單!只要先取得選定虛擬機器的虛擬磁碟清單,接著再刪除選定的虛擬磁碟即可。值得注意的是,在如圖15所示的命令範例中,刪除虛擬磁碟的方法是透過虛擬磁碟的名稱(例如Hard disk 2)來做為條件,而不是輸入虛擬磁碟的檔案名稱:

圖15  移除選定的虛擬磁碟。

Get-HardDisk -VM VM01 |FL Name,Filename $hdd = Get-HardDisk -VM "VM01" -Name 'Hard disk 2' Remove-HardDisk -HardDisk $hdd

移轉單台虛擬機器

vSphere vMotion是平日管理大量虛擬機器任務中最常使用的功能,因為無論是ESXi主機需要停機維護,還是因資源分配問題需要進行手動移轉,都得仰賴這項超強的功能,才能夠讓線上虛擬機器在移轉過程中不會中斷運行。然而,vMotion的功能不僅可以跨越主機、vSwitch、叢集,甚至於還可以直接移轉至雲端,全看所使用的vSphere版本類型為何。

相信大多數IT人員都已習慣使用vSphere Client來進行虛擬機器的移轉,也就是選定虛擬機器,按下滑鼠右鍵,再點選【移轉】,然後依序完成選取移轉類型、選取計算資源、選取網路、選取vMotion優先順序等設定,才能夠完成一台虛擬機器的移轉。

經由vSphere Client的圖形介面操作vMotion功能,不僅比較沒有效率且一次只能夠移轉一台虛擬機器。若改由PowerCLI命令來執行vMotion功能,只需要一道命令即可迅速完成。

如圖16所示,先執行以下命令查看目前準備要移轉的VM01虛擬機器電源狀態,以及它所運行的ESXi主機:

圖16  成功移轉虛擬機器。

Get-VM -Name VM01 | FT name, powerstate,vmhost

接著,執行下列命令來分別完成虛擬機器的移轉,以及查看移轉後的虛擬機器狀態資訊。在此可以發現原先運行於esxi01.lab02.com主機的虛擬機器,在維持線上正常運行的狀態之下,已經成功移轉到esxi04.lab02.com主機:

Get-VM -Name VM01 | Move-VM – Destination esxi04.lab02.com Get-VM -Name VM01 | FT name, powerstate,vmhost

對於常見的虛擬機器移轉失敗的原因,通常是如圖17所示的錯誤訊息一樣,表示因為沒有在目標ESXi主機的VMkernel介面中啟用vMotion功能,導致虛擬機器無法成功移轉。

圖17  虛擬機器移轉失敗。

如圖18所示,便是從vSphere Client網站中所開啟的VMkernel介面頁面,如果此介面僅專用於虛擬機器移轉用途,只需要唯一勾選「vMotion」功能即可。不過,若沒有這麼多的網路資源可用,建議也可以與「管理」功能的流量一併啟用。如果想透過PowerCLI來對於選定的ESXi主機,啟用所有VMkernel介面中的vMotion功能,可以參考下列的命令範例:

圖18  VMkernel介面卡設定。

Get-VMHost esxi04.lab02.com | Get- VMHostNetworkAdapter -VMKernel | Set-VMHostNetworkAdapter -VMotion Enabled $true

另一個可能造成無法進行線上移轉虛擬機器的原因是,目的地ESXi主機尚未連接來源ESXi主機的虛擬機器資料存放區。而迅速解決這項問題的方法是,只需要開啟vSphere Client,並在來源的資料存放區頁面中勾選虛擬機器所在的資料存放區,再點選「動作」選單中的【將資料存放區掛接至其他主機】選項,最後完成目的地主機的選取設定即可。

虛擬機器批量移轉

前面的線上移轉範例僅是針對單一台虛擬機器,至於如何使用PowerCLI來批次移轉多台虛擬機器?其實做法也不難,只要懂得善用Foreach的迴圈命令即可,在此舉兩個常見的做法來做說明。

第一個方法是採用如下的命令範例,先建立好一個虛擬機器的清單變數,再搭配ForEach-Object命令,將此變數中的所有虛擬機器設定移轉至esxi02.lab02.com主機即可:

$vmList = "VM01","VM02","VM03" $vmList | ForEach-Object { Move-VM -VM $_ -Destination esxi02.lab02.com }

另一個方法是先建立好一個CSV的虛擬機器清單(例如vmList.csv),然後再如下列的命令範例,使用Import-Csv來讀取此檔案,並且透過Foreach取得Name欄位下的所有虛擬機器清單,來依序完成移轉至esxi02.lab02.com主機的任務:

Import-Csv C:\Temp\vmList.csv | Foreach {Get-VM $_.Name | Move-VM -Destination (Get-VMHost esxi02.lab02.com)}

虛擬機器快照管理

快照是虛擬機器最好用的功能之一,雖然它不能夠取代備份功能,但卻可以讓許多重要的虛擬機器在準備調整、更新、升級作業系統或應用程式之前,迅速完成最新狀態的快照,一旦發生快照後所進行的各項任務有任何瑕疵時,便可以快速完成復原操作,這樣的做法可遠比一般備份還原的速度快上許多。

透過PowerCLI來為某一個選定的虛擬機器建立快照是相當容易的,一般來說,會為虛擬機器在不同階段所做的變更,皆執行一次快照。如圖19所示,只要執行以下命令,就可以為這台VM01的虛擬機器,依序完成建立Snapshot01、Snapshot02、Snapshot03三個快照:

圖19  建立三個虛擬機器快照。

Get-VM VM01 | New-Snapshot -Name "Snapshot01" -Description "This is Snapshot01" Get-VM VM01 | New-Snapshot -Name "Snapshot02" -Description "This is Snapshot02" Get-VM VM01 | New-Snapshot -Name "Snapshot03" -Description "This is Snapshot03"

在虛擬機器快照刪除之前若需要進行還原,如圖20所示,可以先執行「Get-Snapshot -VM "VM01"」命令,查看選定的虛擬機器中目前的快照清單。接著再執行「Set-VM -VM VM01 -Snapshot "Snapshot01"」命令來還原選定的快照。

圖20  還原快照。

任何的虛擬機器快照皆不宜久存於儲存區中,因為長久下來不僅會累積許多占用儲存空間的快照檔案,也會影響虛擬機器的運行效能。

如圖21所示,想要刪除虛擬機器中選定的快照,可參考以下命令範例:

圖21  刪除虛擬機器快照。

Get-Snapshot -VM "VM01" -Name "Snapshot02" | Remove-Snapshot

若要刪除選定虛擬機器中的所有快照,只要執行以下命令即可完成:

Get-VM -Name "VM01" | Get-Snapshot | Remove-Snapshot

Guest OS運行管理

vSphere虛擬機器要運行得順暢,除了ESXi主機、實體網路以及儲存設備的基礎效能要好之外,虛擬機器的Guest OS也必須安裝VMware Tools,而且最好能夠維持在當前vSphere架構下的最新版本,如此才能夠讓各項功能的運行正常,這包括了HA、FT、DRS、vSAN以及各種與vSphere進行整合的功能與服務。

想要查看某一台虛擬機器的VMware Tools狀態資訊,可以如圖22所示分別執行「$vm=Get-VM -Name VM01」與「$vm.ExtensionData.Guest」命令即可得知。

圖22  查看VMware Tools狀態與版本等資訊。

執行以上兩道命令後不僅可以知道目前的VMware Tools是否正在執行中,也可以查看到所安裝的版本編號以及是否為最新版本,而三個欄位依序分別是ToolsRunningStatus、ToolsVersion、ToolsVersionStatus。

對於VMware Tools的版本狀態資訊,不一定得透過虛擬機器名稱來呈列,也可以參考如圖23所示的範例,執行以下命令來查詢VM01與Storage01這兩台虛擬機器中相對應的Guest OS電腦名稱、IP位址以及VMware Tools版本狀態:

圖23  查詢Guest OS相關VMware Tools資訊。

$vm=Get-VM -Name VM01,Storage01 $vm.ExtensionData.Guest | FT Host Name,IpAddress,ToolsVersionStatus

不過,這種做法的缺點是對於尚未安裝VMware Tools的Guest OS,其電腦名稱與IP位址皆會出現空白,原因便是沒有VMware Tools能夠回傳這一些系統資訊。想要確認哪些虛擬機器尚未安裝VMware Tools,採用上述的命令肯定行不通。必須改用以下命令與參數來取得尚未安裝VMware Tools的清單,如圖24所示,在執行結果中,只要ToolsStatus欄位出現空白,即表示此須機器的Guest OS尚未安裝VMware Tools:

圖24  查詢未安裝VMware Tools虛擬機器清單。

Get-VM | Where-Object {$_.Extension Data.Guest.ToolsStatus -eq "tools NotInstalled"} | Format-Table -Property Name, PowerState, ToolsStatus -AutoSize

一旦確認虛擬機器的Guest OS已經安裝VMware Tools,除了可以根據vSphere授權版本的不同來使用進階的功能,例如vMotion、HA、DRS、FT等功能外,對於一些常用的基礎維護功能也將可以正常執行。

如圖25所示,在此先執行「Get-VMGuest -VM VM01」命令來取得該虛擬機器的基本資訊,包括運行狀態、IP位址以及Guest OS版本。緊接著執行「Suspend-VMGuest -VM VM01」命令,暫停此虛擬機器的運行。若要完全停止此虛擬機器的運行,可以改執行Stop-VMGuest命令。無論是對於暫停中還是已停止的虛擬機器,若要進行虛擬機器的啟動,必須執行「Start-VM -VM VM01」命令,如果是要重新啟動可執行「Restart-VMGuest」命令。

圖25  暫停與啟動Guest OS。

當正從遠端以PowerCLI連線管理虛擬機器時,若需要複製檔案到虛擬機器的Guest OS中,該怎麼做呢?或許會說直接在Guest OS中先啟用遠端桌面服務,再以遠端桌面的用戶端程式進行連線即可。這確實是最方便的做法,不過有許多企業IT因資訊安全的規範,可能不允許直接這麼做。

此時可以如圖26所示參考以下命令範例,先取得虛擬機器的狀態資訊,確認已在運行中,就可以將目前指定路徑下的檔案,直接複製到虛擬機器Guest OS的路徑中。此命令執行時,必須特別注意GuestUser參數所指定的帳號是否具備該目的地路徑的存取權限:

圖26  將檔案複製到Guest OS中。

Get-VMGuest -VM VM01 Copy-VMGuestFile -Source C:\test.txt -Destination C:\temp -LocalToGuest -VM VM01 -GuestUser administrator -GuestPassword 12@AcEBCD

完成檔案複製到虛擬機器Guest OS的操作後,可以如圖27所示透過以下命令範例,查看在Guest OS指定資料夾路徑下的檔案清單。值得注意的是,其中的Invoke-VMScript命令搭配-ScriptText參數設定,可用來執行任何已存在於Guest OS中的程式,例如將某個執行程式複製到Guest OS後,立刻執行並查看執行回傳的結果:

圖27  查看Guest OS目錄檔案清單。

$vm=Get-VM -Name VM01 Invoke-VMScript -VM $vm -ScriptText "dir C:\Temp" -GuestUser "Admini strator" -GuestPassword 12@AcEBCD

結語

PowerCLI之所以相當實用,關鍵在於兩大因素,第一是它能執行所有在圖形介面中的各種任務,並且可以批次完成來大幅減少逐筆任務的操作時間,例如本文所介紹的兩種批次新增大量虛擬機器的技巧。第二是它已整合於Windows PowerShell命令介面中,只要開啟PowerShell就可以直接安裝PowerCLI模組並開始連線與使用。

雖然PowerCLI已經相當強大,但對於IT管理員而言,它仍有一些進步的空間,在此也舉例兩大重點的展望。第一是讓PowerCLI的命令控制台(Console)能夠直接內建於vSphere Client與ESXi Host Client的介面中。第二是讓管理員在vSphere Client與ESXi Host Client介面中所執行的各項操作,其執行結果都能夠產生PowerCLI的完整命令與參數,如此一來,管理員便可以善用這些命令參數範例,進一步產出自定義的各類Script。

<本文作者:顧武雄,Microsoft MVP 2004-2016、MCITP與MCTS認證專家、台灣微軟Technet、TechDays、Webcast、MVA特約資深顧問講師、VMware vExpert 2016-217、IBM Unified Communications/Notes/Domino/Connections Certified。>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!