2. PowerCLI环境搭建与连接管理
PowerCLI 是 VMware 官方提供的 PowerShell 模块集合,它把 vSphere 的 SOAP/REST API 封装成上千个 cmdlet,让我们可以用脚本批量管理 vCenter 与 ESXi。要把它用起来,第一步不是急着写脚本,而是把运行环境、连接方式和凭据管理这三件事做扎实。本节围绕安装配置、连接 vCenter 与 ESXi、多版本兼容性、凭据安全存储与连接复用展开。
安装与配置 PowerCLI
PowerCLI 现在以 PowerShell 模块形式发布,推荐在 PowerShell 7.x(Windows/Linux/macOS 均可)或 Windows PowerShell 5.1 上安装。安装前先确认 PowerShellGet 可用,然后从 PowerShell Gallery 拉取模块:
# 查看当前 PowerShell 版本与执行策略
$PSVersionTable.PSVersion
Get-ExecutionPolicy -List
# 安装 PowerCLI(当前用户范围,避免管理员权限依赖)
Install-Module -Name VMware.PowerCLI -Scope CurrentUser -AllowClobber
# 验证安装结果
Get-Module -Name VMware.PowerCLI -ListAvailable | Select-Object Name, Version
安装完成后,建议先做几项基础配置,否则首次连接很可能失败。PowerCLI 默认会向 VMware 发送 CEIP 客户体验数据,并可能因证书校验、PowerShell 版本检查而中断自动化脚本:
# 关闭 CEIP 数据收集
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false
# 关闭 PowerCLI 版本检查(离线或内网环境常用)
Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction Ignore -Confirm:$false
Set-PowerCLIConfiguration -Scope User -DisplayDeprecationWarnings $false -Confirm:$false
# 查看当前配置
Get-PowerCLIConfiguration
InvalidCertificateAction 设为 Ignore 只适合实验或内网自签证书环境。生产环境应导入受信任 CA 证书,或使用 Warn 并配合证书指纹校验,避免中间人风险。连接 vCenter 与 ESXi
连接 vCenter 使用 Connect-VIServer,连接独立 ESXi 主机使用 Connect-VMHost(或同样用 Connect-VIServer 指向主机地址)。两者返回的都是连接对象,后续 cmdlet 依赖当前会话中的默认连接。
# 连接 vCenter(推荐用 FQDN,避免证书 CN 不匹配)
Connect-VIServer -Server vcsa01.lab.local -User 'administrator@vsphere.local' -Password $pwd
# 连接独立 ESXi 主机
Connect-VIServer -Server esxi01.lab.local -User root -Password $pwd
# 查看当前所有连接
$global:DefaultVIServers
# 断开指定连接
Disconnect-VIServer -Server vcsa01.lab.local -Confirm:$false
当同时连接多个 vCenter 时,PowerCLI 会把最后连接的一个设为默认目标,容易造成“脚本跑到了错误的 vCenter”。稳妥做法是显式指定 -Server 参数,或在脚本开头用 Set-PowerCLIConfiguration -DefaultVIServerMode Multiple 明确多连接模式,并在每个操作中带上目标服务器。
多版本兼容性管理
PowerCLI 版本与 vSphere 版本存在对应关系:较新的 PowerCLI 通常向下兼容旧 vCenter,但旧 PowerCLI 无法管理新版本 vCenter 的新特性。常见做法是按环境隔离模块版本,而不是全局升级。可以用 Save-Module 把指定版本下载到独立目录,再通过 Import-Module -FullyQualifiedName 精确加载:
# 下载指定版本到本地目录
Save-Module -Name VMware.PowerCLI -Path C:\Modules -RequiredVersion 13.0.0.21662141
# 精确加载该版本
Import-Module 'C:\Modules\VMware.PowerCLI\13.0.0.21662141\VMware.PowerCLI.psd1'
# 查看已加载版本
Get-Module VMware.PowerCLI
下表给出常见对应关系的参考(示例,具体以 VMware 官方兼容性矩阵为准):
| PowerCLI 版本 | 支持的 vSphere 版本 | 典型场景 |
|---|---|---|
| 13.x | vSphere 8.0 / 7.0 | 新环境、REST API 优先 |
| 12.x | vSphere 7.0 / 6.7 | 主流生产环境 |
| 11.x | vSphere 6.7 / 6.5 | 旧环境维护 |
凭据安全存储与连接复用
把明文密码写进脚本是最常见的坏习惯。PowerShell 提供 PSCredential 对象,配合 Export-Clixml 可以把凭据加密保存到文件(Windows 上使用 DPAPI,仅当前用户可解密):
# 首次:交互式输入并保存凭据
$cred = Get-Credential -Message 'vCenter 管理员凭据'
$cred | Export-Clixml -Path "$env:USERPROFILE\.vsphere\vcsa01.cred.xml"
# 后续脚本中读取
$cred = Import-Clixml -Path "$env:USERPROFILE\.vsphere\vcsa01.cred.xml"
Connect-VIServer -Server vcsa01.lab.local -Credential $cred
连接复用方面,PowerCLI 的 Connect-VIServer 本身会维护会话,同一 PowerShell 会话中重复连接同一服务器会复用已有连接。批量脚本中应避免在循环里反复连接/断开,而是“一次连接、多次操作、最后统一断开”。下面这段示例展示了连接复用与凭据读取的组合写法:
$cred = Import-Clixml "$env:USERPROFILE\.vsphere\vcsa01.cred.xml"
Connect-VIServer -Server vcsa01.lab.local -Credential $cred | Out-Null
try {
Get-VM -Server vcsa01.lab.local | Where-Object PowerState -eq 'PoweredOn' |
Select-Object Name, NumCpu, MemoryGB
}
finally {
Disconnect-VIServer -Server vcsa01.lab.local -Confirm:$false
}
下图把本节的关键关系串起来:从安装配置、凭据存储,到连接 vCenter/ESXi,再到多版本隔离与连接复用,形成一条可复用的环境搭建链路。
C:\vsphere-auto\,其中 creds\ 存凭据、modules\ 存指定版本模块、scripts\ 存脚本。这样换机器或交接时,只需复制目录并重新生成凭据文件即可。最后提醒两点实践细节:一是连接对象是会话级的,脚本结束前务必 Disconnect-VIServer,否则长时间运行会累积会话;二是 Connect-VIServer 支持 -Session 参数复用已有会话对象,在跨函数传递连接时比反复传服务器名更可靠。把本节的环境搭建与连接管理做规范,后续的批量编排才有稳定的执行基础。