vSphere 每虚拟机 EVC 配置审计教程:PowerCLI 自动化实操

增强型 vMotion 兼容性(EVC)是 vSphere 环境中保障虚拟机跨主机迁移兼容性的关键功能,而每虚拟机 EVC(Per-VM EVC)允许单独为虚拟机配置 EVC 模式,无需继承集群配置,大幅提升了迁移灵活性。本文将详细介绍如何使用 PowerCLI 脚本自动化审计 vSphere 环境中已配置 Per-VM EVC 的虚拟机,帮助管理员快速完成库存统计、兼容性排查,同时提供脚本扩展用法和操作注意事项,适用于各类 vSphere 运维场景,无需复杂编程基础即可上手。

一、Per-VM EVC 基础认知

1. 核心作用

EVC 的核心价值是通过统一 CPU 功能集,确保虚拟机在不同 CPU 型号的 ESXi 主机间顺畅迁移(vMotion)。传统集群级 EVC 会让所有虚拟机继承同一配置,而 Per-VM EVC 将 EVC 模式设为虚拟机独立属性,即使虚拟机迁移到其他集群或数据中心,其 EVC 配置也不会丢失,尤其适合混合 CPU 环境和跨集群迁移场景。

2. 继承规则

若虚拟机未单独配置 Per-VM EVC,会自动沿用所在集群的 EVC 模式;若已配置,则优先使用自身 EVC 设置,但不能超过集群 EVC 的功能上限(避免 CPU 功能不兼容)。

3. 审计必要性

随着集群规模扩大,手动排查每台虚拟机的 Per-VM EVC 配置不仅耗时,还易出错。自动化审计可快速定位已配置 Per-VM EVC 的虚拟机,为迁移规划、配置优化和故障排查提供准确数据支持。

二、审计准备工作

1. 环境要求

已安装 VMware PowerCLI 模块(支持 vSphere 7.0 及以上版本);

具备 vCenter Server 管理员或只读权限的账户(需能访问虚拟机配置信息);

客户端与 vCenter Server 网络连通(默认端口 443)。

2. PowerCLI 安装与初始化

若未安装 PowerCLI,可通过以下步骤快速部署:

以管理员身份打开 PowerShell;

执行安装命令:Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Force;

解除执行策略限制(可选):Set-ExecutionPolicy RemoteSigned -Confirm:$false;

导入模块:Import-Module VMware.PowerCLI;

忽略证书验证(非生产环境可选):Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false。

3. 连接 vCenter Server

为保障安全,推荐通过交互式凭据输入方式连接 vCenter,避免密码明文暴露:

复制代码
# 定义vCenter服务器地址

$vCenterServer = "vcenter.example.com" # 替换为实际vCenter地址或IP

# 交互式获取登录凭据

$credential = Get-Credential -Message "请输入vCenter登录账号和密码"

# 建立连接

Connect-VIServer -Server $vCenterServer -Credential $credential

连接成功后,将显示 vCenter 服务器版本、会话 ID 等信息,可通过Get-Connection命令验证连接状态。

三、核心审计脚本解析与执行

1. 脚本原理

判断虚拟机是否启用 Per-VM EVC 的关键是检查Runtime.FeatureMask属性 ------ 该属性非空即表示虚拟机已配置独立 EVC 模式。同时,脚本会自动排除名称包含 "vCLS-" 的系统虚拟机(这些是 vSphere 集群服务虚拟机,用于维护 DRS、HA 等功能,无需审计)。

2. 完整审计脚本

复制代码
# 1. 获取所有虚拟机的名称和运行时属性(仅提取必要属性,提升执行效率)

$vms = Get-View -ViewType VirtualMachine -Property Name, Runtime

# 2. 循环遍历虚拟机,筛选启用Per-VM EVC的实例

foreach ($vm in $vms) {

# 条件:FeatureMask非空(启用Per-VM EVC)且排除vCLS系统虚拟机

if ($vm.Runtime.FeatureMask -ne $null -and $vm.Name -notmatch "vCLS-") {

# 输出结果(包含虚拟机名称和Per-VM EVC状态)

Write-Host "✅ 虚拟机 [$($vm.Name)] 已启用Per-VM EVC"

}

}

# 3. 断开vCenter连接(释放资源)

Disconnect-VIServer -Server * -Confirm:$false

Write-Host "`n📋 审计完成!已列出所有启用Per-VM EVC的虚拟机"

3. 执行步骤

将脚本中的$vCenterServer替换为实际环境的 vCenter 地址;

在 PowerShell 中粘贴脚本,按回车执行;

按提示输入 vCenter 登录账号和密码;

等待脚本执行完成,终端将输出所有已启用 Per-VM EVC 的虚拟机名称。

4. 示例输出

复制代码
✅ 虚拟机 [Web-Server-01] 已启用Per-VM EVC

✅ 虚拟机 [DB-Server-02] 已启用Per-VM EVC

✅ 虚拟机 [APP-Server-03] 已启用Per-VM EVC

📋 审计完成!已列出所有启用Per-VM EVC的虚拟机

四、脚本扩展:导出审计结果到 CSV

若需将审计结果存档或进一步分析,可修改脚本将结果导出为 CSV 文件(支持 Excel 打开),扩展脚本如下:

复制代码
# 1. 连接vCenter(同上,省略重复代码)

$vCenterServer = "vcenter.example.com"

$credential = Get-Credential -Message "请输入vCenter登录账号和密码"

Connect-VIServer -Server $vCenterServer -Credential $credential

# 2. 收集虚拟机信息并筛选

$evcVms = @() # 定义数组存储结果

$vms = Get-View -ViewType VirtualMachine -Property Name, Runtime

foreach ($vm in $vms) {

if ($vm.Runtime.FeatureMask -ne $null -and $vm.Name -notmatch "vCLS-") {

# 构建结果对象

$result = [PSCustomObject]@{

虚拟机名称 = $vm.Name

Per-VM EVC状态 = "已启用"

审计时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

}

$evcVms += $result

}

}

# 3. 导出CSV文件(指定保存路径)

$exportPath = "C:\Reports\Per-VM_EVC_Audit.csv" # 替换为实际保存路径

$evcVms | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation -Force

# 4. 断开连接并提示

Disconnect-VIServer -Server * -Confirm:$false

Write-Host "📊 审计结果已导出至:$exportPath"

五、注意事项

权限要求:执行脚本的账户需具备 vCenter 的 "虚拟机。配置。查看" 权限,否则可能无法获取FeatureMask属性;

虚拟机状态:脚本支持运行中或已关机的虚拟机,无需关闭虚拟机即可完成审计;

vCLS 虚拟机:名称以 "vCLS-" 开头的虚拟机是 vSphere 集群服务的系统实例,用于保障 DRS、HA 功能可用性,脚本自动排除此类虚拟机,无需手动筛选;

版本兼容性:该方法适用于 vSphere 7.0 Update 1 及以上版本(Per-VM EVC 功能从该版本开始支持);

脚本修改:可根据需求添加更多属性(如虚拟机所在集群、电源状态等),只需在Get-View的-Property参数中补充对应属性名称(如Cluster, Runtime.PowerState)。

通过以上步骤,即可快速完成 vSphere 环境中 Per-VM EVC 配置的自动化审计,大幅提升运维效率,减少人工操作失误。如需进一步扩展脚本功能(如批量修改 EVC 模式、发送审计报告邮件等),可根据实际场景调整代码逻辑。

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质13 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务