PowerShell多vCenter连接脚本执行New-TagAssignment报错求助
问题
编写了一个需连接两台vCenter的PowerShell脚本,开头配置如下:
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Confirm:$false Connect-VIServer -Server Vcenter1 -User XXXX -Password XXX Connect-VIServer -Server Vcenter2 -User XXXX -Password XXXX
脚本包含如下判断逻辑:
if(在Vcenter1中找到元素){ Get-VM my_VM| New-TagAssignment -Tag XXXX -Server Vcenter1 } elseif(在Vcenter2中找到元素){ Get-VM my_VM| New-TagAssignment -Tag XXXX -Server Vcenter2 }
执行脚本时返回错误:
New-TagAssignment The TagCisImp - 'my_tag' must be managed by the same VC Server that you are using to invoke this operation
已设置ServerMode为Multiple且指定了-Server参数,但仍出现该错误,请问脚本存在什么问题?
分析与解决
核心问题是**Get-VM未指定-Server参数**,导致获取的VM对象可能来自非目标vCenter实例。即使New-TagAssignment指定了-Server,如果VM对象所属的vCenter与Tag的管理vCenter不一致,就会触发该错误。
在多vCenter连接模式下,所有与vCenter交互的cmdlet都必须明确指定-Server参数,确保操作的对象和目标vCenter强绑定。修正后的脚本如下:
if(在Vcenter1中找到元素){ # 明确指定从Vcenter1获取VM对象 Get-VM my_VM -Server Vcenter1 | New-TagAssignment -Tag XXXX -Server Vcenter1 } elseif(在Vcenter2中找到元素){ # 明确指定从Vcenter2获取VM对象 Get-VM my_VM -Server Vcenter2 | New-TagAssignment -Tag XXXX -Server Vcenter2 }
另外需要注意:-Tag参数对应的标签必须存在于指定的-Server对应的vCenter中,否则也会引发类似的跨vCenter不匹配错误。
内容的提问来源于stack exchange,提问作者Morph59
相关产品推荐
相关产品推荐

