如何水平而不是垂直显示 PowerShell 结果?

How to display PowerShell results horizontally instead of vertically?

例如,您指定了一个变量,如下所示。

$data1 = get-psdrive | where-object {$_.name -like 'c'} | select -expandproperty used

$data2 = get-psdrive | where-object {$_.name -like 'c'} | select -expandproperty free

echo $data1,data2

输出是垂直的。

$data1

$data2

我用write-host -nonewline水平显示输出,但是命令没有导出到txt

write-host $data1 -nonewline; write-host $data2 -nonewline >> c:\test.txt

如何横向显示并导出为txt?

在变量中使用双引号字符串:Write-Host “$data1,$data2”

阅读更多https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7.1

您不能为此使用 Write-Host。即使您更改为 Write-Host -NoNewLine 它仍然无法工作,因为 Write-Host 旨在 直接写入屏幕 不能redirected 除非您使用 PowerShell 5+ 并重定向 6 号流(信息流)

Write-Host -NoNewLine $data1,$data2 6>output.txt

在这种情况下,它当然不会打印成字符串。简而言之,PowerShell 5+ 中的 Write-Host 不会写入标准输出,而是 信息流

真正的解决方案 写入屏幕并能够重定向到文件或管道到另一个命令是使用 Write-Outputecho的别名), 并简单地使用单个字符串写入一行

Write-Output "$data1,$data2"
echo "$data1,$data2"
echo ($data1 + "," + $data2)

有关详细信息,请参阅 Write-Host Considered Harmful

如何转换为 json(或 csv)?请注意,“>>”可以混合编码,但 add-content 不能。

get-psdrive c | select used, free | ConvertTo-Json -Compress | 
  add-content test.txt
get-content test.txt

{"Used":217365741568,"Free":21004943360}

或者只是加入他们。太糟糕了 select -expand 不适用于多个属性。

psdrive c | % { ($_.used,$_.free) -join ',' }

217382371328,20988313600