You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerCLI修改VMware快照描述不生效问题求助

解决PowerCLI修改vCenter快照描述不生效的问题

我看了你的脚本,发现几个关键问题导致快照描述修改没实际生效,咱们一步步来梳理和修正:

问题根源分析

  1. VM属性的类型错误:你第一次获取快照时用了select VM, Name, Description,这里的VM是完整的VM对象而非字符串名称。后续执行get-vm -name $($snap.vm)时,PowerShell会强制把对象转成字符串,虽然偶尔能匹配成功,但大概率会出现定位偏差,导致Get-Snapshot找不到目标快照,Set-Snapshot自然也就没作用。

  2. 冗余的对象查询:你已经拿到了$Snap快照对象,没必要再重新通过Get-VM+Get-Snapshot定位,直接用原对象操作更可靠,还能避免重复查询带来的错误。

  3. 未抑制确认提示(隐性风险):Set-Snapshot默认会弹出确认对话框,批量操作时可能因为这个环节导致部分修改被中断,加上-Confirm:$false能确保操作顺畅执行。

修正后的完整脚本

Get-Module -Name VMware* -ListAvailable | Import-Module

$AllSnaps = @()
$User = "Domain\UserName"
$File = "Credentials.txt"
$MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $File | ConvertTo-SecureString)

foreach ($VC in $VCServers) {
    $Stat = Connect-VIServer $VC -Credential $MyCredential -ErrorAction 'SilentlyContinue'
    if ($Stat.IsConnected) {
        Write-Host "Connected to VC - $VC"
        # 保留完整快照对象,无需提前筛选属性,方便后续直接操作
        $AllSnaps = Get-VM | Get-Snapshot
        
        ForEach ($Snap in $AllSnaps) {
            # 跳过无需修改的快照
            if ($Snap.Name -match "NBU_SNAPSHOT" -or $Snap.Description -match "PERM-") {
                Write-Host "No Action required for snapshot '$($Snap.Name)' on VM '$($Snap.VM.Name)'"
            }
            else {
                # 处理空描述场景,避免生成无意义的"PERM-"前缀
                $NewDesc = if ([string]::IsNullOrEmpty($Snap.Description)) {
                    "PERM-"
                }
                else {
                    "PERM-" + $Snap.Description
                }
                
                Write-Host "Updating description for snapshot '$($Snap.Name)' on VM '$($Snap.VM.Name)' to: $NewDesc"
                # 直接用原快照对象执行修改,无需重复查询定位
                $Snap | Set-Snapshot -Description $NewDesc -Confirm:$false
            }
        }
        Disconnect-VIServer -Server $VC -Force -Confirm:$False
    }
}

额外优化说明

  • 移除了select VM, Name, Description,让$Snap保留完整的快照对象,通过管道直接传给Set-Snapshot能100%确保操作的是目标快照。
  • 增加了空描述的处理逻辑,避免出现仅包含"PERM-"的无效描述(如果不需要可以直接删除这部分判断)。
  • 优化了日志输出,让你能清晰看到每个被处理的快照信息,方便后续排查问题。
  • 加上-Confirm:$false,确保批量操作不会被确认提示中断。

你可以先在测试环境里跑这个修正后的脚本,要是还存在问题,可以检查一下vCenter账号是否拥有修改快照属性的权限,或者快照是否正被其他工具锁定(比如备份任务执行中)。

内容的提问来源于stack exchange,提问作者rpr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:40:06