我是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
]
}
答案 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}}