使用PowerCLI上传.ovf至vSphere内容库报错如何解决
问题背景
编写PowerShell/PowerCLI脚本实现从指定路径向vSphere内容库上传文件的功能,当前脚本可正常上传.iso、.mf、.vmdk、.nvram格式文件,但上传.ovf文件时触发如下报错:
New-ContentLibraryItem : 6/22/2022 New-ContentLibraryItem An error occurred while trying to update content library item's files. For more details check the inner exception. At line:60 char:9 + New-ContentLibraryItem -ContentLibrary $ExistingRepo -Name $i ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [New-ContentLibraryItem], VimException + FullyQualifiedErrorId : ViCore.Cis.ApiFacade.Impl.ContentLibrary.UpdateItemFilesSession.CloseServerSession.Error,VMware.VimAutomation.ViCore.Cmdlets.Commands.ContentLibrary.NewContentLibraryItem
检索公开资料未找到可行方案,需求为无需登录平台手动操作,通过脚本完成.ovf文件导入内容库,需要明确报错规避方式,以及上传.ovf是否需要使用专用命令。
解决方案
- 报错根因:
New-ContentLibraryItem上传单文件.ovf时,不会自动解析OVF描述符中声明的关联磁盘、配置依赖,上传会话关闭时服务端做完整性校验找不到关联文件,就会抛出该错误,和ISO等独立单文件的上传逻辑存在差异。 .ovf上传不需要额外的专用命令,只要调整传参逻辑即可:不要只传单个.ovf文件,需要将同目录下和该OVF关联的所有配套文件(同名.mf、.vmdk、.nvram)全部传入-Files参数,注意要把.ovf文件放在参数列表的第一位,示例代码:
# 获取目标内容库对象 $targetLib = Get-ContentLibrary -Name "你的目标内容库名称" # 组装OVF全套关联文件路径 $ovfFileSet = @( "C:\template\win2022\win2022.ovf", "C:\template\win2022\win2022.mf", "C:\template\win2022\win2022-disk1.vmdk", "C:\template\win2022\win2022.nvram" ) # 执行上传 New-ContentLibraryItem -ContentLibrary $targetLib -Name "win2022_template" -Files $ovfFileSet
- 如果是单文件
.ova格式模板,直接给-Files参数传入单个OVA路径即可正常上传,无需额外关联其他文件。 - 若集齐所有关联文件后仍然报错,先检查本地PowerCLI版本,12.3以下版本存在OVF上传的已知bug,执行以下命令升级到12.3及以上版本即可修复:
Install-Module -Name VMware.PowerCLI -MinimumVersion 12.3.0 -Force
- 额外校验项:上传前确认
.mf清单文件内记录的各文件哈希值和本地文件实际值一致,如果手动修改过OVF配置但未重新生成清单文件,也会触发服务端校验失败,这种情况可以直接删除本地旧的.mf文件,vSphere会在上传过程中自动生成新的有效清单文件。
内容的提问来源于stack exchange,提问作者wvk0138
相关产品推荐
相关产品推荐

