【VMware vSphere】使用RVTools中的PowerShell脚本创建导出vSphere环境信息的自动化任务。

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"文件夹,如果是自定义安装那找到自行设置的文件夹即可,打开文件资源管理器导航到该文件夹后可以看到如下图内容。

我后面就不再使用文件资源管理器进行查看,全部通过 PowerShell 查看,你可以打开 PowerShell 使用下面命令进入到 RVTools 的安装文件夹。

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

在 RVTools 的安装目录里,提供了如下图所示的 PowerShell 示例脚本文件,而此次重点要使用到的是 RVToolsBatchMultipleVCs.ps1 脚本,通过这个脚本文件可以使用 PowerShell 自动导出 vSphere 环境信息,再配合 Windows 的任务计划程序实现自动化任务。当然,配合这个脚本使用的还有另外三个脚本文件,主要会用到 RVToolsPasswordEncryption.ps1 脚本,使用这个脚本对密码进行加密,另外两个脚本可选使用,RVToolsCreateLocalUser.ps1 脚本用于创建专用于执行自动化任务的本地用户,RVToolsFindBadVM.ps1 脚本用于查找未被 RVTools 导出到清单的虚拟机(通常是具有大量磁盘文件需要被整合的虚拟机)。

其实,RVToolsBatchMultipleVCs.ps1 脚本文件中真正使用到的是如下图所示的可执行程序。默认情况下,安装完 RVTools 使用到的 GUI 客户端就是 RVTools.exe 执行程序,虽然我们都是用图形化界面,不过 RVTools.exe 执行程序也可以通过命令行运行,也就是 RVToolsBatchMultipleVCs.ps1 脚本所应用的方法。RVToolsMergeExcelFiles.exe 和 RVToolsSendMail.exe 执行程序是另外两个有用的工具,第一个可以将导出的多个 EXCEL 表格文件合成一个表格文件,第二个可以将这个导出的表格文件通过配置 SMTP 服务器后以邮件的方式发送给管理员。

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

你可以直接使用输出后的加密密码,然后使用 userid+password 的认证方式来连接 ESXi 主机或 vCenter。

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

不过因为加密后的密码太长了,可以给加密后的密码创建一个变量,这样直接带入变量要方便一些。

$password = "_RVToolsV3PWD01000000d08c9ddf0115d1118c7a00c04fc297eb010000001af35e7a80eab64998aeed360314277d00000000020000000000106600000001000020000000c6eda441a4fb0787f966d9990f8ce505de268890c1df387421922247dd951382000000000e80000000020000200000005d1195f9f473904b4433882ff823b62de740fb2c0f10352dd6dc1e3ffe7e6a0b3000000097c976cd9792dcc693f022efb4d32187b1a5705676255adc402dc87233a448dab076e41e69f4d1ff27de235d3226343b4000000061c72a72a652d0df185f3767520c01e0faaadbbe9cc307651deee3288dcee3ea7b7198d8d42e145d1a521d4e2cbbe67bb8a45db4756a2f1fa5d4ebc4640829e7"

运行 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

运行 RVTools 命令使用 ExportAll2csv 导出选项将所有选项卡以 CSV 格式导出到指定目录。

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

运行 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

运行 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

运行 RVTools 命令使用 ExportvHealth2xlsx 导出选项将 vHealth 选项卡以 XLSX 格式导出到指定目录,使用 -f 选项指定导出文件的名称,不指定则导出带有时间戳的文件名。

在了解了 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 中执行,确定是否能正常导出。如果能正常导出,那可以进行后续步骤。

Windows 运行 Win+R 键,然后输入"taskschd.msc",按 Enter 键打开任务计划程序。

点击右边的"创建基本任务",设置任务的名称。

设置任务的执行时间,选择"每天",并设置具体执行的时间。

设置任务执行的操作,选择"启动程序",设置执行程序为"PowerShell",添加执行参数"C:\RVTools\Task\RVToolsBatchVC.ps1"。

确定任务,勾选下面的复选框,点击完成。

在"安全选项"设置中,勾选"不管用户是否登录都要运行",配置合适的系统类型,点击确定并输入执行任务的用户密码。

最后,等待任务执行,并查看结果。

参考: 《RVTools Documentation》

相关推荐
H轨迹H4 天前
一文学会powshell使用及功能
网络安全·渗透测试·powershell·红队全栈
tiandyoin4 天前
删除 C 盘空文件夹--递归删除
脚本·batch·powershell·空文件夹
JUNIOR_MU12 天前
【VMware VCF】管理 VCF 环境中组件的密码策略。
powershell·vcf·vmware cloud foundation·powervcf·password management·password policy·password expiration·password complexity·account lockout
Ztiddler12 天前
【CMD、PowerShell和Bash设置代理】
开发语言·深度学习·github·bash·powershell·代理·cmd
geyee1 个月前
win11 下 利用 PowerShell 提取 wps 表格中嵌入的图片
wps·powershell
奋斗的小青年I1 个月前
VMware高危漏洞VMSA-2024-0019修复堆溢出和权限提升漏洞
esxi·vmware·vmsa-2024-0019
奋斗的小青年I1 个月前
从H3C和Dell官网下载OEM版VMware Esxi镜像攻略
云计算·esxi·vmware·h3c·云桌面
程序猿进阶1 个月前
为什么数学常数在 powershell 中以不同的方式截断?
java·linux·服务器·前端·后端·面试·powershell
云计算练习生1 个月前
命令行工具PowerShell使用体验
powershell·命令行工具·windows命令·windows功能·操作系统命令
JUNIOR_MU2 个月前
【VMware VCF】使用 PowerShell 脚本管理 SDDC Manager 中的软件包。
powershell·包管理·vcf·vmware cloud foundation·sddc manager·powercli·powervcf·vcfbundlemanagement.ps1