我正在尝试在我们的Azure环境中更新一些旧版资源标签。我需要保留这些资源的标签并仅更新其中一个,但是对100多个资源进行的这项简单任务对我来说却变得头疼。 PowerShell根本不会轻易用新值覆盖现有标签,所以我创建了一个我希望是一个脚本为当前标签创建变量的脚本,省略了一个需要更新的操作,删除了所有应用的标签,将新标签和值添加到存储的标签变量,然后将其应用于具有此错误标签值的所有资源。这是我的代码:
$r = (Get-AzResource -Tag @{Environment="Non-Prodd"}).Name
$tags = (Get-AzResource -Name $r).Tags | Where {$_.Key -ne 'Environment'}
Get-AzResource -resourcename $r | Set-AzResource -Tag @{}
$tags += @{Environment="Non-Prod"}
Get-AzResource -resourcename $r | Set-AzResource -Tag $tags -Force
我以“非产品”为例来说明需要更新的值。 $ tags变量代码不会在其输出中排除Environment标记,这是我最大的问题。从存储的变量重新应用标签时,我对“环境”仍在应用感到不满。
如果我只是跑步:
(Get-AzResource -Name $r).Tags | Where {$_.Key -ne 'Environment'}
省略的标签仍在列表中。
我也愿意采用其他任何方式来实现自己的目标。
答案 0 :(得分:0)
只需:
$tags = (Get-AzResource -Name $r).Tags
$tags.environment = value
Get-AzResource -resourcename $r | Set-AzResource -Tag $tags -Force