我做了一些PowerShell脚本来获取有关系统驱动器的信息,然后在控制台中编写它们,然后将输出流导出为json格式。一切正常,我得到了信息,然后用json格式写,但是diskName值中出现一个空白区域,我必须将其移除然后才能浏览我的数据。
这是我的剧本:
$drives = Get-PSDrive -PSProvider 'FileSystem'
ForEach ($drive in $drives)
{
if ( ($drive.Used -ne 0) -and ($drive.Free -ne $null))
{
$Name = $drive.Name
Write-Host $Name
Write-Host '{"name":"disk", "diskName":"'$Name'"}'
}
}
我想要这个输出:
C
{"name":"disk", "diskName":"C"}
D
{"name":"disk", "diskName":"D"}
P
{"name":"disk", "diskName":"P"}
但我得到了这个:
C
{"name":"disk", "diskName":" C"}
D
{"name":"disk", "diskName":" D"}
P
{"name":"disk", "diskName":" P"}
如果有人对这个空白区有解释,那将是非常有用的。
答案 0 :(得分:1)
只要您使用PowerShell v3或更新版本,就无需编写自己的JSON;使用ConvertTo-JSON
。
Get-PSDrive -PSProvider Filesystem |
Where-Object {$_.Used -ne 0 -and $_.Free -ne $null} |
Select-Object -property @{Name="Name";Expression={"disk"}},@{Name="Diskname";Expression={$_.name}} |
ConvertTo-Json;
由于v2兼容性是一项要求:
Get-PSDrive -PSProvider FileSystem|
Where-Object {$_.Used -ne 0 -and $_.Free -ne $null}|
ForEach-Object{
Write-output "{`"name`":`"disk`",`"diskName`":`"$($_.name)`"}"
};
答案 1 :(得分:1)
或者你可以改变这个:
Write-Host '{"name":"disk", "diskName":"'$Name'"}'
对此:
Write-Host "{`"name`":`"disk`", `"diskName`":`"$Name`"}"
单引号与双引号的行为不同,并在尝试将变量插入字符串时更改行为。
答案 2 :(得分:0)
以这种方式尝试:
get-psdrive -psprovider FileSystem | foreach-object {
if ( ($_.Used -ne 0) -and ($_.Free -ne $NULL) ) {
$_.Name
"{`"name`":`"disk`", `"diskName`":`"$($_.Name)`"}"
}
}