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

张开发
2026/4/11 16:16:14 15 分钟阅读

分享文章

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

更多文章