说明:
本文档涉及两个脚本
1.获取当前订阅所有VM标签信息
2.将获取到标签信息更新到目标VM。
1、获取标签信息
Powshell脚本
本脚本将会自动获取当前订阅下所有VM的标签信息并导入到vm_tags.csv文件中。
# 登录到 Azure
Connect-AzAccount -UseDeviceAuthentication -EnvironmentName AzureChinaCLoud
# 选择订阅
Select-AzSubscription -SubscriptionId ba150bd3-0b18-4be5-b5b8-456cec6d4ef5
# 安装Az module
#Install-Module -Name Az -Scope CurrentUser -Force
# 获取所有的 VM
$vms = Get-AzVM
# 初始化一个空的结果数组
$results = @()
# 对每一个 VM 获取其标签并添加到结果数组
foreach ($vm in $vms)
{
$vmName = $vm.Name
# 获取 VM 的所有标签
$tags = $vm.Tags
# 对于每一个标签,创建一个包含 标签名称 和 标签值 的对象,并添加到结果数组
foreach ($tag in $tags.Keys)
{
$result = New-Object PSObject -Property @{
"VMName" = $vmName
"TagKey" = $tag
"TagValue" = $tags[$tag]
}
$results += $result
}
}
# 导出结果数组到 CSV 文件
$results | Export-Csv -Path "vm_tags.csv" -NoTypeInformation -Encoding UTF8
2、修改vm_tags.csv文件内容
将vm_tags.csv文件中VMName名称对应替换为目标的VMName
1.使用记事本打开vm_tags.csv
2.更改VMName名称
3.选择“另存为”
4.编码选择“UTF-8”#对应导入脚本时指定的UTF8编码,可避免出现中文乱码问题。
3、将获取到标签信息更新到VM中。
Powshell脚本
本脚本将会自动将vm_tags.csv文件中的标签信息更新到当前订阅下对应VM中。
# 选择订阅
Select-AzSubscription -SubscriptionId cddd023e-f5e8-4a21-81d4-8494dee232eb
# CSV文件放在脚本所在的路径中
$csvData = Import-Csv -Path ./vm_tags.csv -Encoding UTF8
# 循环遍历CSV中的每一行
foreach ($row in $csvData) {
# Extract the VM name and tag information
$vmName = $row.VMName
$tagKey = $row.TagKey
$tagValue = $row.TagValue
# 将虚拟机标记
$vm = Get-AzVM -Name $vmName
# 如果不存在,跳过这一行
if ($null -eq $vm) {
Write-Warning "Couldn't find VM with name $vmName, skipping..."
continue
}
# 如果虚拟机没有任何标签,只需为其创建一个新的散列表
if ($null -eq $vm.Tags) {
$vm.Tags = @{}
}
# 添加或覆盖新标签
$vm.Tags[$tagKey] = $tagValue
# 用新标签更新虚拟机
Update-AzVM -ResourceGroupName $vm.ResourceGroupName -VM $vm
}