删除powershell脚本中不需要和不可理解的空间

时间:2014-05-22 13:08:50

标签: powershell formatting powershell-v2.0 whitespace

我做了一些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"}

如果有人对这个空白区有解释,那将是非常有用的。

3 个答案:

答案 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)`"}"
  }
}