Powershell - 删除foreach中的最后一个逗号

时间:2014-12-29 08:30:38

标签: json powershell zabbix

我是PowerShell脚本的新手,需要帮助我的脚本如下。我需要删除最后一个逗号","从下面的结果。这是JSON格式,我需要能够将此信息用于Zabbix监控Hyper-V VM。

脚本:

    $colItems = Get-VM

write-host "{"
write-host " `"data`":["
write-host

foreach ($objItem in $colItems) {
    $line =  " { `"{#VMNAME}`":`"" + $objItem.Name + "`" , `"{#VMSTATE}`":`"" + $objItem.State + "`" },"
    write-host $line
}

write-host
write-host " ]"
write-host "}"
write-host

以下是结果:

{ 
 "data":[

 { "{#VMNAME}":"cp01" , "{#VMSTATE}":"Off" },
 { "{#VMNAME}":"dc01" , "{#VMSTATE}":"Running" },
 { "{#VMNAME}":"ex01" , "{#VMSTATE}":"Off" },
 { "{#VMNAME}":"fc01" , "{#VMSTATE}":"Running" },
 { "{#VMNAME}":"rdg01" , "{#VMSTATE}":"Running" },
 { "{#VMNAME}":"Windows 2012R2 G2 Template" , "{#VMSTATE}":"Off" }, <--- THIS I WANT TO REMOVE

 ]
}

1 个答案:

答案 0 :(得分:1)

JSON不是一个扁平的字符串,永远不会试图通过连接扁平字符串来构建它,并希望它最终会全部出现。

JSON是一个序列化数据结构,对其进行处理。创建一个数据结构并将其序列化。

在您的情况下,数据结构应该是包含键data的对象(即哈希表),而键$result = @{} $result.data = @() foreach ($vm in Get-VM) { $result.data += @{ "{#VMNAME}" = $vm.Name; "{#VMSTATE}" = $vm.State; } } $result | ConvertTo-Json 又包含一个对象数组。这很容易做到。

foreach

完成。


备选表示法,使用%简写@{ "data" = Get-VM | % { @{ "{#VMNAME}" = $_.Name; "{#VMSTATE}" = $_.State; } } } | ConvertTo-Json ,保存临时变量和几行:

{{1}}