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 模式、发送审计报告邮件等),可根据实际场景调整代码逻辑。

相关推荐
初願致夕霞2 小时前
Linux_线程
linux·运维·服务器·c++
Elastic 中国社区官方博客2 小时前
如何使用 LogsDB 降低 Elasticsearch 日志存储成本
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·可用性测试
CDN3602 小时前
高防服务器端口被占用 / 不通?端口映射与协议配置解决
运维·服务器
chaofan9802 小时前
2026大模型应用架构选型:如何通过API聚合平台构建企业级AI服务?
人工智能·架构·自动化·api
腾讯蓝鲸智云2 小时前
提升研发效能:DevOps平台高效权限配置与同步方案
运维·服务器·人工智能·云计算·devops
努力努力再努力wz2 小时前
【C++高阶系列】外存查找的极致艺术:数据库偏爱的B+树底层架构剖析与C++完整实现!(附B+树实现的源码)
linux·运维·服务器·数据结构·数据库·c++·b树
PH = 72 小时前
virtualbox+vagrant创建CentOS-7虚拟机
运维·ruby·vagrant
黑金IT2 小时前
AI带‘脑’摒弃前端硬编码实现浏览器自动化系统
前端·人工智能·自动化
财迅通Ai2 小时前
SuperX完成日本全球供应中心首批高性能AI服务器交付,全球战略迈出关键一步
运维·服务器·人工智能·superx·中恒电气