使用powershell转义输出中的斜杠

时间:2014-10-06 21:40:47

标签: arrays powershell

我正在使用powershell,我试图将其转换为JSON,但问题是需要加倍所有斜杠。因此\需要转换为\\,而\\需要在输出中替换为\\\\。我使用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 "}";

并且输出im得到正确,除了斜杠需要加倍:

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

2 个答案:

答案 0 :(得分: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'=@()}
(get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $Object.data += [pscustomobject]@{'#CPUID'= $_.TrimStart("$LowerCaseComputerName") }}
$object | ConvertTo-Json

这给了你相同的结果我很确定。

答案 1 :(得分:1)

如果您使用的是PowerShell v3,则有一个cmdlet ConvertTo-Json,用于将数据结构转换为JSON格式。你可能会发现这比手工制作更容易。 {字符使字符串格式化非常混乱。