2014-12-29 2 views
2

나는 powershell 스크립팅에 익숙하지 않고 아래 스크립트로 도움이 필요합니다. 나는 아래의 결과에서 마지막 쉼표 ","를 제거해야합니다. 이것은 Zabbix Hyper-V VM 모니터링을 위해이 정보를 사용할 수 있어야하는 JSON 형식입니다.Powershell - foreach에서 마지막 쉼표 제거

스크립트

{ 
"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

JSON 평면 문자열을 연결하고 나올 것으로 기대하여 빌드하려고, 플랫 문자열 결코하지 않습니다 : 여기에

$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 

이의 결과입니다 결국 모든 권리.

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 
+0

감사합니다. 이것은 내가 찾고 있었던 바로 그 것이었다. – elimat

+0

@elimat 내 대답을 다시 한번 살펴보고 조금 더 향상 시켰습니다. – Tomalak

+0

나는 아주 좋은 것을 본다. 고맙습니다. 나는 이것을 명심 할 것이다. – elimat