Powershell 如果虚拟机的标记名中有空格,如何将vmware标记添加到虚拟机

Powershell 如果虚拟机的标记名中有空格,如何将vmware标记添加到虚拟机,powershell,vmware,powercli,Powershell,Vmware,Powercli,我正在尝试创建一个脚本,将“标记”添加到我的虚拟机。我正在使用Powershell/PowerCLI来执行此操作。如果标记名中没有空格,我可以添加名称。例如,应用程序标记名为“Test”,它将其添加到服务器。但是,如果所有者的名字是“约翰·多伊”,它将不会因为空格而被占用。以下是迄今为止的myscript: $vCenter = "test.com" $ServerName = "test1" Add-PSSnapin VMware.VimAutomation.Core Connect-ViS

我正在尝试创建一个脚本,将“标记”添加到我的虚拟机。我正在使用Powershell/PowerCLI来执行此操作。如果标记名中没有空格,我可以添加名称。例如,应用程序标记名为“Test”,它将其添加到服务器。但是,如果所有者的名字是“约翰·多伊”,它将不会因为空格而被占用。以下是迄今为止的myscript:

$vCenter = "test.com"
$ServerName = "test1"

Add-PSSnapin VMware.VimAutomation.Core
Connect-ViServer -server $vCenter -ErrorAction Stop 

$AppTag = Read-Host "What is the Application tag name for $ServerName"
$myTag1 = Get-Tag $AppTag
$myVM = Get-VM "$ServerName"
New-TagAssignment -Tag $myTag1 -Entity $myVM

$AppOwnerTag = Read-Host "What is the Application Owner tag name for $ServerName"
$myTag2 = Get-Tag $AppOwnerTag
$myVM = Get-VM $ServerName
New-TagAssignment -Tag $myTag2 -Entity $myVM

$CreatedByTag = Read-Host "What is the Created By tag name for $ServerName"
$myTag3 = Get-Tag $CreatedByTag
$myVM = Get-VM $ServerName
New-TagAssignment -Tag $myTag3 -Entity $myVM

是的,您可以在标记名中使用空格。您遇到的问题可能是由于PowerShell版本造成的,或者如果您在vCenter中有多个具有相同名称或相同标记的标记,则可能是一个问题:

  • 首先,使用命令
    获取PowerCLIVersion
    确认您的PowerShell VMware PowerCLI版本至少为6.5.3,或者如果您喜欢使用
    获取模块-将VMware命名。*选择名称,版本
    。根据,新标记分配有一个相关问题,已修复。如果您不确定如何升级或安装VMware PowerCLI,如果您按照本文所述安装了PackageManager,则可以
    以管理员身份导入模块VMware.PowerCLI
    ,如本文所述
  • 另一件事是确认如果您的查询正确且只有一个vCenter处于活动状态。例如,您可能需要将命令修改为
    New TagAssignment-Tag$myTag3-Entity$myVM-Server$vCenter
    。$vCenter与您连接VIServer$vCenter时使用的名称相同,在您的情况下,我假定它是“test.com”。如果您在执行此查询之前登录到其他vCenter,而不是从中退出,则这可能是您的解决方案。例如,我没有看到脚本底部的
    断开VIServer$vCenter
    ,这就是我建议这样做的原因
  • 最后要尝试的是,您可能在多个标记类别中具有相同的标记名。中的建议是通过在命令中指定类别来显式获取标记,例如
    $myTag1=get tag$AppTag-category$myCategory
    。另一个不太理想的选择可能是重命名这些类别中的标记,以便它们不会重叠

请原谅我缺乏vmware经验,但标签名中是否允许有空格?通常不建议使用空格和特殊字符。我建议将空格替换为
作为解决办法。例如,
$AppOwnerTag=(读取主机“什么是$ServerName的应用程序所有者标记名”)-替换“”,'.\u'
如果收到错误消息,请更新问题以包含该错误。标记名中的空格对于v5.8R1中的新标记分配没有任何问题。