2026 年 VMware 监控指南:工具、指标与性能
2026-06-04
通过 vSphere Client 管理 VMware 环境对于小型部署来说效果不错,但随着您的基础设施增长,手动管理很快就会变得低效。VMware PowerCLI 提供了一种强大的方式来自动执行常规任务、管理多个主机和虚拟机,并轻松执行批量操作。
本指南将带您了解如何安装 PowerCLI、连接到您的 vSphere 环境,以及使用基本命令和即用型脚本来自动化日常 VMware 任务。
PowerCLI 是一个命令行界面,用于管理和自动化 VMware 环境的各个层面。它作为 PowerShell 模块的集合提供,包含超过 700 个 cmdlet,涵盖了从网络、存储到虚拟机和客户机操作系统设置的所有内容。

PowerShell 是微软底层的自动化框架。PowerCLI 通过添加特定于 VMware 的功能来扩展它,因此您可以在同一个脚本中将标准的 PowerShell 逻辑(循环、条件、变量)与特定于 VMware 的操作结合起来。
PowerCLI 支持广泛的 VMware 产品,包括:
PowerCLI 与其他 VMware 自动化工具的比较
| 工具 | 最佳用途 | 学习曲线 | VMware 原生? | 有状态? |
|---|---|---|---|---|
| PowerCLI | vSphere 自动化、报告、日常运维 | 低–中 | 是 | 否 |
| Ansible | 配置管理、跨平台剧本 | 中 | 通过模块 | 否 |
| Terraform | 基础设施预置 (IaC) | 中–高 | 通过提供商 | 是 |
| vSphere REST API | 自定义应用集成、开发工作流 | 高 | 是 | 否 |
对于已经熟悉 PowerShell 的管理员来说,PowerCLI 的入门门槛最低。虽然像 Terraform 这样的工具在基础设施预置方面表现出色,但 PowerCLI 更适合持续运维:批量更新、快速报告和临时故障排除,而无需管理状态文件的开销。
安装 PowerCLI 很简单,但首先满足先决条件将为您避免后续的常见错误。
-Scope CurrentUser 参数。这是让 PowerCLI 启动并运行的最简单方法。它直接从 PowerShell Gallery 拉取最新版本。
Install-Module -Name VCF.PowerCLI
Install-Module -Name VCF.PowerCLI -Scope CurrentUser
Get-Module -Name VCF.PowerCLI -ListAvailable
成功的输出将列出可用模块及其版本号和安装目录。
当您的目标机器无法访问互联网时,请使用此方法。
$env:PSModulePath
cd path_to_powershell_modules_folder
Get-ChildItem * -Recurse | Unblock-File
Get-Module -Name VCF.PowerCLI -ListAvailable
安装完成后,第一步是连接到您的 VMware 环境。您可以直接连接到单个 ESXi 主机进行本地化故障排除,但大多数管理员会连接到 vCenter Server 以在单个会话中管理整个集群。
Connect-VIServer cmdlet 在工作站和 vSphere API 之间建立一个会话。连接后,服务器将存储在 $DefaultVIServers 变量中,后续的 cmdlet 将自动对其运行。
# 连接到 vCenter Server
Connect-VIServer -Server vcenter.example.com
如果您的 Windows 会话凭据具有必要的权限,PowerCLI 将直接连接而不提示。否则,将出现登录窗口。
默认情况下,当 PowerCLI 遇到不受信任的证书时,它会发出警告或阻止连接,这在使用自签名证书的实验室环境中很常见。要配置 PowerCLI 如何处理此问题,请在连接前运行以下命令一次:
# 设置 PowerCLI 忽略证书错误
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

Ignore。在生产环境中,推荐的方法是使用正确签名的证书,而不是绕过验证。在脚本中硬编码密码是初学者常犯的错误,也是一种严重的安全风险。相反,使用 Get-Credential 以交互方式将凭据作为内存中的加密对象捕获。
# 提示输入凭据并存储
$myCreds = Get-Credential
# 使用存储的凭据进行连接
Connect-VIServer -Server vcenter.example.com -Credential $myCreds

VICredentialStore(通过 New-VICredentialStoreItem)或 PowerShell SecretManagement 模块来安全地存储和检索凭据。每次调用 Connect-VIServer 都会在服务器上分配一个会话。资源会一直保持打开状态,直到您显式断开连接,因此请始终在工作或脚本结束时关闭会话。
# 断开与所有活动服务器的连接
Disconnect-VIServer -Server * -Confirm:$false

Disconnect-VIServer 仅关闭与服务器的最后一个连接。如果您打开了多个到同一服务器的连接,请添加 -Force 参数以一次性关闭所有连接。连接到 vCenter 后,您可以使用 PowerCLI cmdlet 从命令行管理整个基础设施。与 GUI 不同,这些命令让您可以在几秒钟内从整个环境中提取数据,并将其直接传递到报告或自动化工作流中。
这些 cmdlet 涵盖了最常见的日常 VM 任务,从检查状态到配置新资源。
Where-Object 按任何属性进行筛选。 # 列出所有已开机的 VM
Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"}

Start-VM -VM "Web-Server-01" -Confirm:$false
New-VM -Name "Test-VM" -ResourcePool "Development" -Datastore "DS-01"
Remove-VM -VM "Test-VM" -DeletePermanently -Confirm:$false
检索 ESXi 主机信息或准备主机进行维护,而无需触及 vCenter GUI。
Get-VMHost | Select-Object Name, ConnectionState, PowerState
Set-VMHost -VMHost "esxi-01.example.com" -State "Maintenance"
快照在打补丁或进行重大更改之前很有用,但不受管理的快照蔓延会迅速消耗数据存储空间。使用这些 cmdlet 来跟踪它们。
# 创建快照
Get-VM "DB-Prod" | New-Snapshot -Name "Pre-Patching"
# 列出所有 VM 的所有快照
Get-VM | Get-Snapshot
# 删除特定快照
Get-Snapshot -VM "DB-Prod" | Remove-Snapshot -Confirm:$false

PowerCLI 的真正优势在于将 cmdlet 与 PowerShell 的管道结合起来。Where-Object 和 Select-Object cmdlet 允许您筛选和格式化输出,而无需任何额外工具。
Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"} | Select-Object Name, MemoryGB
Get-VM | Select-Object Name, NumCPUs, MemoryGB, PowerState | Export-Csv -Path "C:\Reports\VM_Inventory.csv" -NoTypeInformation
存储和网络
Get-Datastore | Select-Object Name, FreeSpaceGB, CapacityGB
# 列出所有标准虚拟交换机
Get-VirtualSwitch
# 列出所有分布式虚拟交换机
Get-VDSwitch

-WhatIf 来验证您要操作的目标对象是否正确。单个命令很有用,但自动化脚本才是 PowerCLI 实现实时节省时间的地方。下面的脚本涵盖了最常见的维护和报告任务,并且只需很少的修改即可运行。
此脚本将完整的 VM 库存导出到带日期的 CSV 文件,对于容量规划或管理报告很有用。
# 检索所有 VM 并将资源规格导出到 CSV 文件
Get-VM | Select-Object Name, NumCPUs, MemoryGB, PowerState,
@{N="Datastore"; E={(Get-Datastore -VM $_).Name}},
@{N="IPAddress"; E={$_.Guest.IPAddress[0]}} |
Export-Csv -Path "C:\Reports\VM_Inventory_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

此脚本为目标集群中的每个 VM 在打补丁前创建一个命名的快照,以便在出现问题时为您提供一个干净的回滚点。
# 定义目标集群
$clusterName = "Production-Cluster-01"
# 为集群中的所有 VM 创建带时间戳的快照
Get-Cluster -Name $clusterName | Get-VM |
New-Snapshot -Name "Pre-Patching-$(Get-Date -Format 'yyyyMMdd')" `
-Description "每月打补丁前的自动化快照" `
-Quiesce:$false -Memory:$false

-Quiesce 要求在每个客户机操作系统上安装并运行 VMware Tools。如果未安装 Tools,该命令将抛出错误。除非您已确认所有目标 VM 上都安装了 Tools,否则请设置 -Quiesce:$false。打开时间过长的快照会消耗数据存储空间,并可能随着时间的推移降低 VM 性能。此脚本列出所有超过 7 天的快照,以便您查看并清理它们。
# 查找所有超过 7 天的快照
$limit = (Get-Date).AddDays(-7)
Get-VM | Get-Snapshot | Where-Object { $_.Created -lt $limit } |
Select-Object VM, Name, Created, SizeGB |
Sort-Object Created

如果您的 VM 按文件夹组织(例如,开发实验室或部门),您可以使用单个命令将它们全部开启或关闭。
# 开启 "Dev-Lab" 文件夹中所有已关闭电源的 VM
Get-Folder "Dev-Lab" | Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"} | Start-VM -Confirm:$false

此脚本将主机置于维护模式。-Evacuate 参数会触发 vMotion,在主机进入维护之前将其所有正在运行的 VM 迁移到集群中的其他主机。
$targetHost = "esxi-hostname.example.com"
# 疏散所有 VM 并将主机置于维护模式
Set-VMHost -VMHost $targetHost -State "Maintenance" -Evacuate

此脚本标记任何可用空间低于 50GB 的数据存储,帮助您在存储问题导致 VM 故障之前发现它们。
# 列出可用空间低于 50GB 的数据存储
Get-Datastore | Where-Object { $_.FreeSpaceGB -lt 50 } |
Select-Object Name,
@{N="FreeGB"; E={[Math]::Round($_.FreeSpaceGB, 2)}},
@{N="CapacityGB"; E={[Math]::Round($_.CapacityGB, 2)}} |
Format-Table -AutoSize

即使是经验丰富的管理员也会遇到 PowerCLI 错误,尤其是在处理证书、安全策略或版本更新时。以下是最常见的问题及其解决方法。
连接时出现 SSL 证书错误
当您的 vCenter 或 ESXi 主机使用您的工作站不信任的自签名证书时,就会发生这种情况。要允许连接在不验证证书链的情况下继续,请在连接前运行以下命令一次:
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
未找到模块
这通常意味着模块未在当前会话中加载,或者安装路径在系统的 $env:PSModulePath 中缺失。尝试手动导入模块:
Import-Module VCF.PowerCLI
如果失败,请验证在离线安装期间模块文件夹是否正确解压,并且它们的名称与模块名称完全匹配。
脚本执行被阻止
Windows 执行策略默认设置为 Restricted,这会阻止所有脚本运行。以管理员身份打开 PowerShell 并运行:
Set-ExecutionPolicy RemoteSigned
这允许本地创建的脚本运行,同时要求从互联网下载的任何内容都需要数字签名。
计划任务中的凭据无效
这通常发生在脚本尝试在非交互式后台会话中执行交互式登录时,或者保存的凭据对象已过期时。与其依赖交互式提示,不如将凭据保存到加密文件中,并在脚本中导入它们:
# 保存凭据一次
$cred = Get-Credential
$cred | Export-Clixml -Path "C:\Scripts\cred.xml"
# 在脚本中导入凭据
$cred = Import-Clixml -Path "C:\Scripts\cred.xml"
Connect-VIServer -Server vcenter.example.com -Credential $cred

已弃用的 Cmdlet 警告
Broadcom 会定期淘汰旧的 cmdlet,以支持更新的 vSphere API 标准。警告消息通常会指出要使用的替换 cmdlet。要获取最新的更改列表,请在 Broadcom 开发者门户 上查看 PowerCLI 发布说明。
PowerCLI 让您能够强大地控制 VMware 环境,但仅靠脚本无法保护您免受数据丢失。
自动化快照和生成库存报告是良好的操作习惯,但快照不是备份。它们与您的 VM 位于同一个数据存储上,这意味着存储故障会同时导致两者宕机。
为了实现真正的保护,您需要一个专用的备份解决方案与您的自动化协同工作。这就是 i2Backup 的用武之地。
i2Backup 是一款企业备份解决方案,专为 PowerCLI 管理员每天管理的环境类型而构建:VMware 基础设施、物理服务器以及在本地和混合云设置中运行的数据库。
对于需要不仅仅是备份的环境,i2Availability 提供实时复制和自动故障转移以实现高可用性,如果您计划将工作负载迁移到云或新基础设施,i2Move 支持无中断的跨平台迁移。您可以单击下面的按钮获得 英方软件 解决方案的免费试用。
PowerCLI 将耗时、重复的 vSphere 任务转变为自动化、可重复的脚本。从连接到 vCenter 和运行基本 cmdlet 到构建批量报告和维护工作流,本指南涵盖的技能为您从命令行管理 VMware 基础设施奠定了坚实的基础。
一个好的下一步是选择一个您定期执行的手动任务,无论是生成 VM 库存还是创建补丁前快照,并将其变成您的第一个 PowerCLI 脚本。一旦您看到它节省了多少时间,剩下的就会自然而然地跟进。
请记住,自动化处理的是运维,而不是保护。将您的 PowerCLI 工作流与专用的备份解决方案(如 英方软件 的 i2Backup)配对,以确保您的环境在两个方面都得到覆盖。
公告
邮件
销售