从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文件中读取列值[重复]

PowerShell - 从 csv 文件读取数据,比较特定列中的数据并将结果写入新文件

powershell 获取VM快照报告并输出到剪贴板,CSV或控制台。

字典到数据框错误:“如果使用所有标量值,则必须传递索引”

windows azure使用powershell批量创建虚拟机