从Excel/CSV文件更新Azure上的标记

nqwrtyyt  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(77)

我目前有一个Powershell脚本,可以将标签从Azure导出到CSV文件,我想做的是更新这个文件上的一些值,然后通过Powershell使用这个文件来更新Azure上的标签。
下面是excel文件的测试示例,名称为资源组File example
在这种情况下,标签用于资源组,标签具有不同的值,并且我还没有找到对这些值进行大量更新的好的解决方案,例如标签可能具有X,Y,Z,K作为值,但是我需要添加T并用W替换一些Y。
我发现批量更新标签是用相同的值更新所有标签,或者单独更新每个资源组的标签,这不是一个解决方案,因为会有数百个资源组。
任何关于这方面的帮助将不胜感激。
尝试了多个脚本以及来自Microsoft文档的cmdlet,但这些都不适用于我所需要的。

gwbalxhn

gwbalxhn1#

您可以采取的一种方法是使用模板引擎。如果您能以某种方式提出一个模板,描述要对.csv文件的单个记录进行的转换,那么剩下要做的事情就是将csv文件应用到模板。
这非常简单,但它不能满足您进行批量更新的需要。批量更新标记的重要性是什么?是否有效利用机器资源?过程的可靠性?
如果您决定使用模板引擎,我有一个非常小的模板引擎,它是由CSV数据驱动的。如下:

<#
.NOTES
    Script: Expand-Csv    Rev:  3.2
    Author: DGC           Date: 2-21-19
.SYNOPSIS
    Generates multiple expansions of a template,
    driven by data in a CSV file.
.DESCRIPTION
    This function is a table driven template tool. 

    It generates output from a template and
    a driver table.  The template file contains plain
    text and embedded variables.  The driver table 
    (in a csv file) has one column for each variable, 
    and one row for each expansion to be generated.
#>
function Expand-csv {
    [CmdletBinding()]
    Param (
       [Parameter(Mandatory=$true)] [string] $driver,
       [Parameter(Mandatory=$true)] [string] $template
    )
    Process {
       Import-Csv $driver | % {
           $_.psobject.properties | % {Set-variable -name $_.name -value $_.value}
           Get-Content $template | % {$ExecutionContext.InvokeCommand.ExpandString($_)} 
       }
    }
}

这是一个简单的,没有装饰的模板引擎的实现。有许多其他模板引擎可用,其中一些更诡辩。如果你想看几个演示来展示这个功能,你可以访问我在github上的repo:github.com/dcressey/expand-csv

ldxq2e6h

ldxq2e6h2#

1.若要用新值替换现有的标记值,可以使用
Update-AzTag

$resourcegroup = Get-Azresourcegroup 
$tag = $resourcegroup.tags
foreach($rg in $resourcegroup){                                                        
 if($tag.Created -eq "date"){
 $replacedTags = @{"Created"="info"}
 Update-AzTag -ResourceId $rg.ResourceId -Tag $replacedTags -Operation Replace
   }
}

1.要将新值与现有值合并/添加,请运行下面的PowerShell脚本,并将operation标志更改为**“Merge”**。如果您想有条件地合并/添加标签,请在foreach下添加一个if循环,如上所示。

foreach($rg in $resourcegroup){                                                        
$mergeTags = @{"Deploy"="Prod"}
Update-AzTag -ResourceId $rg.ResourceId -Tag $mergeTags -Operation Merge
}

相关问题