【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

JUNIOR_MU發表於2024-06-23

RVTools 是 VMware 生態系統中一個非常受歡迎且免費的 Windows 實用工具,用於收集並顯示 VMware vSphere 環境中的相關資訊,如虛擬機器、主機及叢集等相關配置。RVTools 利用 VMware vSphere Management SDK 8.0 和 CIS REST API 提供的豐富資料來直接獲取和收集資訊,這在管理員對 VMware 環境進行監控和管理時非常有用。

RVTools 的創始人是 Rob de Veij,不過在 2023 年的時候被 Dell 公司收購,同時 Rob 作為戴爾團隊的一員,也一直在支援 RVTools 的發展。當然 RVTools 被 Dell 收購以後,一直沒有改變它完全免費使用的策略,這一點值得稱讚。RVTools 這個工具專注於 VMware 環境,其實,Dell 公司同時還有另外一個和 RVTools 類似功能的產品,叫 Live Optics,它除了 vSphere 環境以外,還可以用於其他雲環境,如 Hyper-V、KVM 等,關於這個工具的詳細介紹和使用可以檢視 “Live Optics を利用した仮想化基盤の詳細アセスメント(2024年版)” 這篇文章(可能需要魔法)。

RVTools 當前最新版本RVTools 4.6.1,支援 vSphere 5.x、6.x、7.x、8.x 版本,Windows 安裝環境需要 .NET 4.6.2 支援。RVTools 預設安裝在“C:\Program Files (x86)\Dell\RVTools”資料夾,如果是自定義安裝那找到自行設定的資料夾即可,開啟檔案資源管理器導航到該資料夾後可以看到如下圖內容。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

我後面就不再使用檔案資源管理器進行檢視,全部透過 PowerShell 檢視,你可以開啟 PowerShell 使用下面命令進入到 RVTools 的安裝資料夾。

cd "C:\Program Files (x86)\Dell\RVTools"

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

在 RVTools 的安裝目錄裡,提供瞭如下圖所示的 PowerShell 示例指令碼檔案,而此次重點要使用到的是 RVToolsBatchMultipleVCs.ps1 指令碼,透過這個指令碼檔案可以使用 PowerShell 自動匯出 vSphere 環境資訊,再配合 Windows 的任務計劃程式實現自動化任務。當然,配合這個指令碼使用的還有另外三個指令碼檔案,主要會用到 RVToolsPasswordEncryption.ps1 指令碼,使用這個指令碼對密碼進行加密,另外兩個指令碼可選使用,RVToolsCreateLocalUser.ps1 指令碼用於建立專用於執行自動化任務的本地使用者,RVToolsFindBadVM.ps1 指令碼用於查詢未被 RVTools 匯出到清單的虛擬機器(通常是具有大量磁碟檔案需要被整合的虛擬機器)。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

其實,RVToolsBatchMultipleVCs.ps1 指令碼檔案中真正使用到的是如下圖所示的可執行程式。預設情況下,安裝完 RVTools 使用到的 GUI 客戶端就是 RVTools.exe 執行程式,雖然我們都是用圖形化介面,不過 RVTools.exe 執行程式也可以透過命令列執行,也就是 RVToolsBatchMultipleVCs.ps1 指令碼所應用的方法。RVToolsMergeExcelFiles.exe 和 RVToolsSendMail.exe 執行程式是另外兩個有用的工具,第一個可以將匯出的多個 EXCEL 表格檔案合成一個表格檔案,第二個可以將這個匯出的表格檔案透過配置 SMTP 伺服器後以郵件的方式傳送給管理員。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

RVToolsMergeExcelFiles.exe 和 RVToolsSendMail.exe 工具可選,這在 RVToolsBatchMultipleVCs.ps1 指令碼中可以配置,不過重點需要使用 RVTools.exe 執行程式,下面詳細介紹一下這個程式的命令列選項。

RVTools.exe 命令列可提供使用以下選項:

  • -s //需要連線的 ESXi 主機或 vCenter(域名或IP地址)。
  • -passthroughAuth //使用直通身份驗證連線到 ESXi 主機或 vCenter(使用當前的 Windows 登入憑據)。
  • -u //用於連線到 ESXi 主機或 vCenter 的使用者名稱。
  • -p //用於連線到 ESXi 主機或 vCenter 的密碼。
  • -c //使用的匯出選項。
  • -d //設定匯出的目錄。
  • -f //設定匯出的 XLSX 或 CSV 格式的檔名。如果不設定檔名,RVTools 將建立一個帶有日期時間戳的檔名。

下列選項適用於選擇 -passthroughAuth 時使用:

  • -ExcludeCustomAnnotations //不匯出自定義註釋欄位。
  • -ExcludeTags //不匯出標籤欄位。
  • -DBColumnNames //使用 RVTools intenal 列名稱。如果將匯出上傳到 DBMS,則很有用。
  • -GetFriendlyNames //如果使用 vSAN 並希望匯出顯示友好的 vSAN 名稱而不是 UUID。
  • -GetFileInfo //將填充 vFileInfo 選項卡頁。注意:這可能需要很長時間。

關於 -c 匯出選項,支援以下匯出的資訊:

  • -c ExportAll2xlsx //將RVTools中所有選項卡匯出為 xlsx 格式。
  • -c ExportAll2csv //將RVTools中所有選項卡匯出為 csv 格式。
  • -c Export<tab>2xlsx //將RVTools中特定<選項卡>匯出為 xlsx 格式。
  • -c Export<tab>2csv //將RVTools中特定<選項卡>匯出為 csv 格式。

這裡<tab>選項卡支援以下

    • vInfo
    • vCpu
    • vMemory
    • vDisk
    • vPartition
    • vNetwork
    • vCD
    • vUSB
    • vSnapshot
    • vTools
    • vSource
    • vRP
    • vCluster
    • vHost
    • vHBA
    • vNic
    • vSwitch
    • vPort
    • dvSwitch
    • dvPort
    • vSC+VMK
    • vDatastore
    • vMultiPath
    • vLicense
    • vFileInfo
    • vHealth

在瞭解了 RVTools 相關命令列選項及含義後,下面演示一下使用 RVTools 命令列來完成 GUI 完成的相關工作。

執行 RVTools 命令使用 pass-through 的認證方式來連線 ESXi 主機或 vCenter,pass-through 認證方式就是使用當前 Windows 登入使用者及憑證,如果 vSphere 環境已經加入了 AD 域環境,同時當前執行 RVTools 的Windows 終端使用者是域使用者,則可以使用這種方式,否則大部分情況下是使用下面使用者名稱+密碼的方法連線到 ESXi 主機或 vCenter。

.\RVTools.exe –passthroughAuth –s vcsa8-02.mulab.local

執行 RVTools 命令使用 userid+password 的認證方式來連線 ESXi 主機或 vCenter,大部分情況下使用這種方式。注意,使用這種方式需要提前使用 RVTools 安裝目錄中的 RVToolsPasswordEncryption.ps1 指令碼將需要連線的 ESXi 主機或 vCenter 的密碼進行加密,否則如果直接使用 ESXi 主機或 vCenter 的密碼進入連線,則會報“Login Failed: Cannot complete login due to an incorrect user name or password.”錯誤,RVTools 工具不支援明文連線,使用加密後的密碼進行連線也保證了真實的密碼不被洩漏的風險。

執行 RVToolsPasswordEncryption.ps1 指令碼後,輸入 ESXi 主機或 vCenter 的登入密碼完成加密,得到輸出加密後的密碼。

.\RVToolsPasswordEncryption.ps1

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

你可以直接使用輸出後的加密密碼,然後使用 userid+password 的認證方式來連線 ESXi 主機或 vCenter。

.\RVTools.exe -s vcsa8-02.mulab.local -u vsphere.local\administrator -p _RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb010000001af35e7a80eab64998aeed360314277d00000000020000000000106600000001000020000000c6eda441a4fb0787f966d9990f8ce505de268890c1df387421922247dd951382000000000e80000000020000200000005d1195f9f473904b4433882ff823b62de740fb2c0f10352dd6dc1e3ffe7e6a0b3000000097c976cd9792dcc693f022efb4d32187b1a5705676255adc402dc87233a448dab076e41e69f4d1ff27de235d3226343b4000000061c72a72a652d0df185f3767520c01e0faaadbbe9cc307651deee3288dcee3ea7b7198d8d42e145d1a521d4e2cbbe67bb8a45db4756a2f1fa5d4ebc4640829e7

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

不過因為加密後的密碼太長了,可以給加密後的密碼建立一個變數,這樣直接帶入變數要方便一些。

$password = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb010000001af35e7a80eab64998aeed360314277d00000000020000000000106600000001000020000000c6eda441a4fb0787f966d9990f8ce505de268890c1df387421922247dd951382000000000e80000000020000200000005d1195f9f473904b4433882ff823b62de740fb2c0f10352dd6dc1e3ffe7e6a0b3000000097c976cd9792dcc693f022efb4d32187b1a5705676255adc402dc87233a448dab076e41e69f4d1ff27de235d3226343b4000000061c72a72a652d0df185f3767520c01e0faaadbbe9cc307651deee3288dcee3ea7b7198d8d42e145d1a521d4e2cbbe67bb8a45db4756a2f1fa5d4ebc4640829e7"

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

執行 RVTools 命令使用 ExportAll2xlsx 匯出選項將所有選項卡以 XLSX 格式匯出到指定目錄,使用 -f 選項指定匯出檔案的名稱,不指定則匯出帶有時間戳的檔名。

.\RVTools.exe -s vcsa8-02.mulab.local -u vsphere.local\administrator -p $password -c ExportAll2xlsx -d C:\RVTools\Temp\ -f all

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

執行 RVTools 命令使用 ExportAll2csv 匯出選項將所有選項卡以 CSV 格式匯出到指定目錄。

.\RVTools.exe -s vcsa8-02.mulab.local -u vsphere.local\administrator -p $password -c ExportAll2csv -d C:\RVTools\Temp\

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

執行 RVTools 命令使用 ExportvInfo2xlsx 匯出選項將 vInfo 選項卡以 XLSX 格式匯出到指定目錄,使用 -f 選項指定匯出檔案的名稱,不指定則匯出帶有時間戳的檔名。

.\RVTools.exe -s vcsa8-02.mulab.local -u vsphere.local\administrator -p $password -c ExportvInfo2xlsx -d C:\RVTools\Temp\ -f vInfo

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

執行 RVTools 命令使用 ExportvInfo2csv 匯出選項將 vInfo 選項卡以 CSV 格式匯出到指定目錄,使用 -f 選項指定匯出檔案的名稱,不指定則匯出帶有時間戳的檔名。

.\RVTools.exe -s vcsa8-02.mulab.local -u vsphere.local\administrator -p $password -c ExportvInfo2csv -d C:\RVTools\Temp\ -f vInfo

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

執行 RVTools 命令使用 ExportvHealth2xlsx 匯出選項將 vHealth 選項卡以 XLSX 格式匯出到指定目錄,使用 -f 選項指定匯出檔案的名稱,不指定則匯出帶有時間戳的檔名。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

在瞭解了 RVTools 的命令列使用方式,現在讓我們回到 PowerShell 指令碼 RVToolsBatchMultipleVCs.ps1 中來,看看如何透過指令碼建立自動化匯出任務。先來看一下 RVToolsBatchMultipleVCs.ps1 指令碼中的內容。

# =============================================================================================================
# Script:    RVToolsBatchMultipleVCs.ps1
# Version:   1.4
# Date:      November, 2023
# By:        Dell Technologies
# =============================================================================================================

<#
.SYNOPSIS
With this example script you can start the the RVTools export all to xlsx function for multiple vCenter servers.
The output xlsx files will be merged to one xlsx file which will be mailed
	
.DESCRIPTION
With this example script you can start the the RVTools export all to xlsx function for multiple vCenter servers.
The output xlsx files will be merged to one xlsx file which will be mailed


.EXAMPLE
 .\RVToolsBatchMultipleVCs.ps1

#>

# Save current directory
$SaveCurrentDir = (get-location).Path

# Set RVTools path
[string] $RVToolsPath = "C:\Program Files (x86)\Dell\RVTools"

# cd to RVTools directory
set-location $RVToolsPath


# -----------------------------------------------------
# Set parameters for vCenter 1 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"                                                    # my test vCenter server
[string] $User = "vsphere.local\rob"                                                    

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir1 = "C:\RVTools"
[string] $XlsxFile1 = "vCenter1.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir1 -f $XlsxFile1"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# -----------------------------------------------------
# Set parameters for vCenter 2 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"
[string] $User = "vsphere.local\rob"

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir2 = "C:\RVTools"
[string] $XlsxFile2 = "vCenter2.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir2 -f $XlsxFile2"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# -----------------------------------------------------
# Set parameters for vCenter 3 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"
[string] $User = "vsphere.local\rob"

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir3 = "C:\RVTools"
[string] $XlsxFile3 = "vCenter3.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir3 -f $XlsxFile3"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# -----------------------------------------------
# Merge xlsx files vCenter1 + vCenter2 + vCenter3
# -----------------------------------------------
$OutputFile = "C:\RVTools\vCenter123.xlsx"
& .\RVToolsMergeExcelFiles.exe -input "$XlsxDir1\$XlsxFile1;$XlsxDir2\$XlsxFile2;$XlsxDir3\$XlsxFile3" -output $OutputFile -overwrite -verbose


# ---------------------
# Mail output xlsx file
# ---------------------
[string] $SMTPserver = "your smtp server"
[string] $SMTPport = "25"
[string] $Mailto = "your email send to address"
[string] $MailFrom = "Your email send from address"
[string] $MailSubject = "`"RVTools export all for vCenter 1 and 2`""

Write-Host "Send output file by mail" -ForegroundColor DarkYellow
$Arguments = "/SMTPserver $SMTPserver /smtpport $SMTPport /mailto $Mailto /mailfrom $Mailfrom /mailsubject $Mailsubject /attachment  $OutputFile"
Write-Host $Arguments
#Start-Process -FilePath ".\RVToolsSendmail.exe" -ArgumentList $Arguments -NoNewWindow -Wait


# Back to starting dir
Set-Location $SaveCurrentDir

我們來詳細看一下 RVToolsBatchMultipleVCs.ps1 指令碼的組成部分,分為幾個板塊,下面一個一個來說明這幾個板塊的作用。下面指令碼開頭中的是介紹,這個指令碼檔案可以執行多個 vCenter 的匯出任務。

# =============================================================================================================
# Script:    RVToolsBatchMultipleVCs.ps1
# Version:   1.4
# Date:      November, 2023
# By:        Dell Technologies
# =============================================================================================================

<#
.SYNOPSIS
With this example script you can start the the RVTools export all to xlsx function for multiple vCenter servers.
The output xlsx files will be merged to one xlsx file which will be mailed
	
.DESCRIPTION
With this example script you can start the the RVTools export all to xlsx function for multiple vCenter servers.
The output xlsx files will be merged to one xlsx file which will be mailed


.EXAMPLE
 .\RVToolsBatchMultipleVCs.ps1

#>

下面內容表示設定環境中 RVTools 的安裝路徑,如果自定義安裝在其他目錄,則需要在“$RVToolsPath” 後面改成自行設定的目錄。

# Save current directory
$SaveCurrentDir = (get-location).Path

# Set RVTools path
[string] $RVToolsPath = "C:\Program Files (x86)\Dell\RVTools"

# cd to RVTools directory
set-location $RVToolsPath

下面內容表示 RVTools 真實執行匯出 vCenter 環境資訊的指令碼命令,因為這是一個批次匯出多個 vCenter 的指令碼,所以可以看到有三個 vCenter 相同的命令列表資訊,因為都是一樣的,所以我只說其中一個,如果環境中只有一個 vCenter ,則只需要把指令碼中的另外兩個刪掉即可。

  • “$VCServer”後面表示定義自己環境中的 ESXi 主機或 vCenter 的地址(域名或IP地址)。
  • “$User” 後面表示定義自己環境中的 ESXi 主機或 vCenter 的使用者名稱。
  • “$EncryptedPassword”後面表示定義自己環境中的 ESXi 主機或 vCenter 的密碼。注意,需要提前使用 RVToolsPasswordEncryption.ps1 指令碼將 ESXi 主機或 vCenter 的登入密碼生成加密密碼,如果使用了passthrough 認證連線方式,則也需要加密 Windows 登入憑證,參考前面。
  • “$XlsxDir1”後面表示定義自己環境中的匯出檔案的資料夾。
  • “$XlsxFile1”後面表示定義匯出的檔案的名稱。
  • “$Arguments”後面表示定義執行匯出的命令。預設 -c 匯出選項為匯出所有選項卡為 XLSX 格式,可自行設定匯出選項,若不使用 -f 選項,則匯出帶有時間戳的檔名,參考前面。
# -----------------------------------------------------
# Set parameters for vCenter 1 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"                                                    # my test vCenter server
[string] $User = "vsphere.local\rob"                                                    

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir1 = "C:\RVTools"
[string] $XlsxFile1 = "vCenter1.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir1 -f $XlsxFile1"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# -----------------------------------------------------
# Set parameters for vCenter 2 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"
[string] $User = "vsphere.local\rob"

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir2 = "C:\RVTools"
[string] $XlsxFile2 = "vCenter2.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir2 -f $XlsxFile2"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# -----------------------------------------------------
# Set parameters for vCenter 3 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "192.168.2.220"
[string] $User = "vsphere.local\rob"

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb01000000325cf1e07062a848a422825c7ccd19f100000000020000000000106600000001000020000000397128ff49bbd394092555bac4ea58b61232edf65d9c19f61f94516857e87e3c000000000e8000000002000020000000d068a8d3251e73170b8fd63e329aecb048885da168bc6a24c363e18f1a0a446c20000000efca9029a70b20b9d2d1042d3f34a1c370b965c085f2933a3fa453a0dd5392324000000084b7ad15d00299271c13ce7f44ad45fb6a6d8ded586f22a27" 

[string] $XlsxDir3 = "C:\RVTools"
[string] $XlsxFile3 = "vCenter3.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir3 -f $XlsxFile3"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}

下面內容表示將上面匯出的多個 vCenter 的 Excel 檔案合併成一個表格檔案並輸出到指定目錄,這裡就使用了 RVTools 安裝目錄中的 RVToolsMergeExcelFiles.exe 執行程式,如果環境中具有多個 vCenter 可以使用這個功能,如果沒有或不想使用這個功能,那可以把這塊內容刪掉即可。

# -----------------------------------------------
# Merge xlsx files vCenter1 + vCenter2 + vCenter3
# -----------------------------------------------
$OutputFile = "C:\RVTools\vCenter123.xlsx"
& .\RVToolsMergeExcelFiles.exe -input "$XlsxDir1\$XlsxFile1;$XlsxDir2\$XlsxFile2;$XlsxDir3\$XlsxFile3" -output $OutputFile -overwrite -verbose

下面內容表示將上面合併輸出的 Excel 檔案透過郵件傳送給管理員,這裡就使用了 RVTools 安裝目錄中的 RVToolsSendmail.exe 執行程式,預設情況下在執行命令的最後一行被註釋掉了,如果需要用到這個功能,可以配置相關資訊並將最後一行的註釋“#”刪除掉,如果不用到這個功能可以不管它或者將這塊內容刪掉。

# ---------------------
# Mail output xlsx file
# ---------------------
[string] $SMTPserver = "your smtp server"
[string] $SMTPport = "25"
[string] $Mailto = "your email send to address"
[string] $MailFrom = "Your email send from address"
[string] $MailSubject = "`"RVTools export all for vCenter 1 and 2`""

Write-Host "Send output file by mail" -ForegroundColor DarkYellow
$Arguments = "/SMTPserver $SMTPserver /smtpport $SMTPport /mailto $Mailto /mailfrom $Mailfrom /mailsubject $Mailsubject /attachment  $OutputFile"
Write-Host $Arguments
#Start-Process -FilePath ".\RVToolsSendmail.exe" -ArgumentList $Arguments -NoNewWindow -Wait

最後,返回到啟動該指令碼的目錄。

# Back to starting dir
Set-Location $SaveCurrentDir

經過上面對 RVToolsBatchMultipleVCs.ps1 指令碼內容的瞭解,結合自身環境中的情況,可以修改指令碼中的內容調整為自己使用的指令碼。比如,我當前環境中只想對一個 vCenter 執行匯出任務,我調整的指令碼如下。

# =============================================================================================================
# Script:    RVToolsBatchVC.ps1
# Version:   1.0
# Date:      June, 2024
# By:        JUNIOR MU
# =============================================================================================================


# Save current directory
$SaveCurrentDir = (get-location).Path

# Set RVTools path
[string] $RVToolsPath = "C:\Program Files (x86)\Dell\RVTools"

# cd to RVTools directory
set-location $RVToolsPath


# -----------------------------------------------------
# Set parameters for vCenter 1 and start RVTools export
# -----------------------------------------------------
[string] $VCServer = "vcsa8-02.mulab.local"
[string] $User = "vsphere.local\administrator"

# use -passthroughAuth or an encrypted password. You can encrypt your password with the provided PowerShell script RVToolsPasswordEncryption.ps1
[string] $EncryptedPassword = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb010000001af35e7a80eab64998aeed360314277d00000000020000000000106600000001000020000000c6eda441a4fb0787f966d9990f8ce505de268890c1df387421922247dd951382000000000e80000000020000200000005d1195f9f473904b4433882ff823b62de740fb2c0f10352dd6dc1e3ffe7e6a0b3000000097c976cd9792dcc693f022efb4d32187b1a5705676255adc402dc87233a448dab076e41e69f4d1ff27de235d3226343b4000000061c72a72a652d0df185f3767520c01e0faaadbbe9cc307651deee3288dcee3ea7b7198d8d42e145d1a521d4e2cbbe67bb8a45db4756a2f1fa5d4ebc4640829e7" 

[string] $XlsxDir1 = "C:\RVTools\Task"
[string] $XlsxFile1 = "vCenter.xlsx"

# Start cli of RVTools
Write-Host "Start export for vCenter $VCServer" -ForegroundColor DarkYellow
$Arguments = "-u $User -p $EncryptedPassword -s $VCServer -c ExportAll2xlsx -d $XlsxDir1 -f $XlsxFile1"

Write-Host $Arguments

$Process = Start-Process -FilePath ".\RVTools.exe" -ArgumentList $Arguments -NoNewWindow -Wait -PassThru

if($Process.ExitCode -eq -1)
{
    Write-Host "Error: Export failed! RVTools returned exitcode -1, probably a connection error! Script is stopped" -ForegroundColor Red
    exit 1
}


# Back to starting dir
Set-Location $SaveCurrentDir

現在你可以使用這個指令碼在 PowerShell 中執行,確定是否能正常匯出。如果能正常匯出,那可以進行後續步驟。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

Windows 執行 Win+R 鍵,然後輸入“taskschd.msc”,按 Enter 鍵開啟任務計劃程式。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

點選右邊的“建立基本任務”,設定任務的名稱。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

設定任務的執行時間,選擇“每天”,並設定具體執行的時間。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

設定任務執行的操作,選擇“啟動程式”,設定執行程式為“PowerShell”,新增執行引數“C:\RVTools\Task\RVToolsBatchVC.ps1”。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

確定任務,勾選下面的核取方塊,點選完成。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

在“安全選項”設定中,勾選“不管使用者是否登入都要執行”,配置合適的系統型別,點選確定並輸入執行任務的使用者密碼。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

最後,等待任務執行,並檢視結果。

【VMware vSphere】使用RVTools中的PowerShell指令碼建立匯出vSphere環境資訊的自動化任務。

參考:《RVTools Documentation》

相關文章