我写了一个类似这样的脚本,我使用$output1
来重定向标准verbose的输出。
$output1 = $(
cmdlet1 [Some Parameters] -Verbose | % {
cmdlet2 [Other Some Parameters] -Verbose
} ) 4>&1
当我不将标准verbose存储在变量中时,它会以一种良好的方式在powershell中打印,并带有换行符。但是,当我在$output1
中捕获标准verbose并将其保存在文件中时,它会在一行很长的行中打印所有内容。
如何以良好的方式将标准verbose存储在变量中?
据我所知,这并没有简单的语法。为什么?因为管道输出会干扰详细、警告和错误消息。仍然有变通办法,稍微复杂一点。将详细输出重定向到临时文件,获取内容,删除文件。看看:
$resultFile = [System.IO.Path]::GetTempFileName();
1| % {
$x = [System.IO.Path]::GetTempFileName();
rm $x -Verbose
} 4>$resultFile
$result = cat $resultFile
rm $resultFile
在您的示例中:
$resultFile = [System.IO.Path]::GetTempFileName();
$(
cmdlet1 [Some Parameters] -Verbose | % {
cmdlet2 [Other Some Parameters] -Verbose
}) 4>&1
$output1 = cat $resultFile
rm $resultFile