我目前有一个 Powershell 脚本,可以将标签从 azure 导出到 CSV 文件,我想要做的是更新此文件上的一些值,然后通过 Powershell 使用此文件来更新 azure 上的标签。
在这种情况下,标签用于资源组,标签具有不同的值,我还没有找到一个好的解决方案来对这些值进行大量更新,例如标签可能具有 X、Y、Z、K 作为值,但是我需要添加 T 并用 W 替换一些 Y。
我发现批量更新标签是更新具有相同值的所有标签,或者单独更新每个资源组的标签,这不是解决方案,因为会有数百个资源组。
对此的任何帮助将不胜感激。
尝试了多个脚本以及 Microsoft 文档中的 cmdlet,但是这些不能满足我的需要。
您可能采取的一种方法是使用模板引擎。如果您能以某种方式提出一个模板来描述要在 .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 上的存储库:github.com/dcressey/expand-csv