通过CSV向azure VM添加标签



试图通过CSV数据向VM添加标签,现在我有以下代码:

if ($context.Account -eq $null) {
#    Login-AzureAccount
Connect-AzAccount
}
# Select Azure Subscription
$subscriptionId = (Get-AzSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru).SubscriptionId
#Select specified subscription ID
Select-AzSubscription -SubscriptionId $subscriptionId
$InputCSVFilePath = "test.csv"
$csvItems = Import-Csv $InputCSVFilePath
################

foreach ($item in $csvItems){
Clear-Variable r

#$r = Get-AzResource -ResourceGroupName $item.ResourceGroup -Name $item.VM -ErrorAction Continue
$r = Get-AzResource -Name $item.VM
################ 
if ($r -ne $null){
if ($r.Tags){
# Tag - Client DL
if ($r.Tags.ContainsKey("Client_DL")){          
$r.Tags["Client_DL"] = $item.ClientDL

}else{
$r.Tags.Add("Client_DL", $item.ClientDL)

}
# Tag - Priority
if ($r.Tags.ContainsKey("Priority")){               
$r.Tags["Priority"] = $item.Priority

}else{
$r.Tags.Add("Priority", $item.Priority)
}
}
}else{
Write-Host "No VM found named $($item.VMName)!"
}
}

我验证了我的代码确实通过了函数,但由于某种原因,标记没有在我的VM上设置。我在powershell中手动运行命令,我可以通过以下操作设置标签:

$r = Get-AzResource -Name TestVM
$r.Tags.Add("Client_DL", "TEST-DL") 

我是不是错过了什么?当我运行代码时,我正在运行Set-PSDebug-Trace2,它看起来很好,但标签没有被设置/写入。

所以您在内存中添加了标记,但没有调用任何Az cmdlet来将标记设置回资源上。

您可以在文档中的示例中看到,他们使用Get-AzResource返回VM,将新标签附加到现有标签上,然后使用Set-AzResource将新添加的标签写回。

小心

通过PowerShell更新标记时,标记将作为一个整体进行更新。如果您要将一个标签添加到已经有标签的资源中,则需要包括您希望放置在资源上的所有标签

您也可以使用Update-AzTag,它有一个-Operation参数,可以让您选择是要合并、替换还是删除现有标记。

https://learn.microsoft.com/en-us/powershell/module/az.resources/update-aztag?view=azps-6.0.0

最终,您需要将$r.Tags值设置回资源,作为if语句中的最后一个操作。

最新更新