从csv读取后使用powershell向vm添加标签时出错
Posted
技术标签:
【中文标题】从csv读取后使用powershell向vm添加标签时出错【英文标题】:Error while adding tags to vm with powershell after reading from csv 【发布时间】:2022-01-22 06:03:48 【问题描述】:我正在尝试通过使用 powershell 脚本从 csv 文件中读取来将标签添加到 azure vm。我想通过循环读取值并添加到 vm 的现有标签(如果有)。以下是我的代码和相应的错误。
$data = Import-CSV C:\Documents\tags-vms.csv
foreach($info in $data)
$tags = (Get-AzResource -ResourceGroupName policyResourceGroup -Name $info.psobject.properties.value[0]).Tags
$scriptBlock = [scriptblock]::Create('@$info.Tags')
$newtags = (& $scriptBlock)
$tags += $newtags
Write-Host $tags
Now the error is
Exception calling "Create" with "1" argument(s): "At line:1 char:13
2021-12-20T16:01:09.2145247Z + @$info.Tags
2021-12-20T16:01:09.2147301Z + ~
2021-12-20T16:01:09.2149246Z Missing '=' operator after key in hash literal.
2021-12-20T16:01:09.2152282Z At line:1 char:13
2021-12-20T16:01:09.2154454Z + @$info.Tags
2021-12-20T16:01:09.2156590Z + ~
2021-12-20T16:01:09.2166796Z The hash literal was incomplete."
2021-12-20T16:01:09.2168854Z At C:\agent\_work\_temp\e8ee61c2-c3f4-4ea5-99ac-4feb671fff57.ps1:18 char:1
2021-12-20T16:01:09.2169842Z + $scriptBlock = [scriptblock]::Create('@$info.Tags')
2021-12-20T16:01:09.2170521Z + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-12-20T16:01:09.2171329Z + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
2021-12-20T16:01:09.2171826Z + FullyQualifiedErrorId : ParseException
Can someone please help.
**csv file contains**
VmName Tags
test-vm01 "loc"="us"
test-vm02 "Loc"="Us";"doseage"="Second"
【问题讨论】:
【参考方案1】:我认为您的问题在于这一行以及您如何从 foreach 循环中的 CSV 对象中检索标签信息:
$scriptBlock = [scriptblock]::Create('@$info.Tags')
在脚本的上一行中,要定义 $tags 变量,您可以使用 ($info.psobject.properties.value[0]) 在 CSV 对象中检索 VM 名称的值。我将尝试在下一行中使用相同的格式,但修改它以使用索引 1 检索 CSV 对象的标记部分:
所以而不是:
$scriptBlock = [scriptblock]::Create('@$info.Tags')
使用:
$scriptBlock = [scriptblock]::Create('@$info.psobject.properties.value[1]')
【讨论】:
您好 JGoose,听从了您的建议。但我得到了同样的错误。使用“1”参数调用“Create”的异常:“At line:1 char:37 2021-12-21T07:21:55.3231637Z + @$info.psobject.properties.value[1] 2021-12 -21T07:21:55.3233791Z + ~ 2021-12-21T07:21:55.3255793Z 在散列文字的键后缺少“=”运算符。以上是关于从csv读取后使用powershell向vm添加标签时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Powershell 从 csv 文件中仅读取一列
PowerShell - 从 csv 文件读取数据,比较特定列中的数据并将结果写入新文件