2014-10-06 78 views
0

使用powershell和Im試圖將其轉換爲JSON,但問題是需要將所有斜線加倍。所以\需要變成\\\\需要在輸出中被\\\\取代。即時通訊使用PowerShell中使用以下腳本:使用powershell輸出斜槓

$array = @() 
echo "{"; echo '"data":['; (get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $array += '{ "{#CPUID}":"'+ $_.TrimStart("$LowerCaseComputerName") } 
for($i = 0; $i -lt $array.Length - 1; $i++){ $array[$i] + '"},' } 
$array[$array.Length - 1] + '"}' 
echo "]" ; echo "}"; 

和輸出即時得到是正確的,除了反斜槓需要加倍:

{ 
"data":[ 
{ "{#CPUID}":"\\aaronmartinez\processor(0)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(1)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(2)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(3)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(4)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(5)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(6)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(7)\% idle time"}, 
{ "{#CPUID}":"\\aaronmartinez\processor(_total)\% idle time"} 
] 
} 
+0

它只是一個字符串,基本上不會捕獲字符串的迴應,然後做一個簡單的字符串替換'' - > \\''? – 2014-10-06 21:43:44

回答

1

所有你需要做的是一個簡單的-Replace '\\','\\',並完成它。第一個'\\'是正則表達式,因此\轉義爲\\。它應該是這樣的:

$array = @() 
"{" 
'"data":[' 
(get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $array += '{ "{#CPUID}":"'+ $_.TrimStart("$LowerCaseComputerName") } 
for($i = 0; $i -lt $array.Length - 1; $i++){ ($array[$i] -replace '\\','\\')+ '"},' } 
($array[$array.Length - 1] -Replace '\\','\\')+ '"}' 
"]" 
"}" 

編輯:雖然這不回答你的問題,在我看來,一個更好的解決辦法是形成正確的對象和使用ConvertTo JSON的cmdlet的。

$object = [pscustomobject][ordered]@{'Data'[email protected]()} 
(get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $Object.data += [pscustomobject]@{'#CPUID'= $_.TrimStart("$LowerCaseComputerName") }} 
$object | ConvertTo-Json 

這給你相同的結果,我很確定。

1

如果您在PowerShell v3中,則有一個用於將數據結構轉換爲JSON格式的cmdlet ConvertTo-Json。你可能會發現比這樣的手工製作更容易。 {字符使字符串格式非常混亂。