2017-05-09 120 views
0

我发现了一个ping script这很有用,但我宁愿将输出写入txt或csv,而不是使用Write-Host输出到PS控制台。如何输出脚本到文件?

这样做的最好方法是什么?

+2

使用PowerShell 5和'Write-Information'。然后,将信息流重定向到一个文件。 – lit

+1

你打算运行什么版本的PowerShell? –

+0

你还想要语法高亮吗?最简单的解决方案会让你失望。允许cmdlet /函数生成输出并允许调用者决定如何处理它或抑制它通常是一个好习惯。有几个流允许你在这里很多功能 – Matt

回答

2

您需要将Write-Host更改为Out-File,或者更好的是Out-Default。使用Out-Default将允许您将输出传输到其他cmdlet,因此可以根据您当前的特定需求,在不同的场合以不同的方式处理输出。

写主机绕过PowerShell管道,并有效地从管道中删除它使用的任何对象,使它们无法分配或由其他cmdlet使用。

参考文献:
Get-Help Write-Host
Get-Help Out-File
Get-Help Out-Default

+0

阅读[这里](http://stackoverflow.com/questions/24453370/how-to-dump-the-foreach-loop-output-into-a-file-in- PowerShell)不应该在循环中使用out-file。 – Heisenberg

+0

@海森堡 - 这是一个反对'Out-File'的好论据,同意;我一直没有把性能作为优先考虑事项 - 尤其是当我倾向于“Out-Default”模式时,我将它留给ping脚本的用户,不管他是希望它转到文件还是转到另一个cmdlet或任何地方,在运行时。 –

+0

我似乎无法找到一个很好的例子,说明如何使用Out-Default在我正在使用此Ping脚本执行的上下文中。你知道吗? – Heisenberg

1

尝试添加标准输出到一个数组。然后在最后写结果。

#Define the array 
$myOutput = @() 

#Do something here" 
$myOutput += $myStdOut 
#Done with something 
$myOutput | out-file -FilePath c:\myOutput.txt -Encoding utf8 -NoClobber 
$cat c:\myOutput.txt