PowerShell 将 Write-Host 重定向到文件不起作用

PowerShell 将 Write-Host 重定向到文件不起作用

有人能解释一下这种行为吗?出了什么问题?

    PS C:\Scripts\Customer_Shares_Permissions> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.5328
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.5328
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS C:\Scripts\Customer_Shares_Permissions> Get-Content .\test.ps1
# Test Write-Host redirecting
Write-Host "Dies ist eine Ausgabe"
Write-Host "Per Write-Host"
Write-Host "auf die Konsole"
Write-Host "Bitte prüfe den redirect in eine Datei"

PS C:\Scripts\Customer_Shares_Permissions> .\test.ps1
Dies ist eine Ausgabe
Per Write-Host
auf die Konsole
Bitte prüfe den redirect in eine Datei

PS C:\Scripts\Customer_Shares_Permissions> .\test.ps1 > test.txt
Dies ist eine Ausgabe
Per Write-Host
auf die Konsole
Bitte prüfe den redirect in eine Datei

PS C:\Scripts\Customer_Shares_Permissions> Get-Content .\test.txt
PS C:\Scripts\Customer_Shares_Permissions> 

文件test.txt已创建,但是为空,并且输出仍然显示在控制台上,而不是直接进入文件。

这不是我所期望的行为。我的想法哪里出了问题?

答案1

您应该使用它Write-Output,因为Write-Host它不会写入文件而是写入控制台。

Write-Output "First line" > text.txt 
Write-Output "Second line" >> text.txt

用于>>将新内容附加到文件。

答案2

这个问题很基本——它来自于对什么缺乏理解Write-Host做:

从 Windows PowerShell 5.0 开始,Write-Host是的包装器Write-Information。这允许您使用Write-Host将输出发送到信息流。

Write-Information使用信息流。现在我们来看看文档:

6 | 信息流 | PowerShell 5.0 |Write-Information

我们可以看到这6就是发生动作的流号。

这意味着要重定向Write-Host到文件,您需要使用:

.\test.ps1 6>test.txt

在 PS 5.0 之前,如果有人仍在使用这样的过时版本(7 已经推出一段时间了),则重定向是不可能的。

但是正如另一个答案所述,除非您有特定的用途Write-Host,否则您可以直接使用它Write-Output来写入标准输出流 (success, stream number 1)。或者您甚至可以使用隐式输出,即字符串,PowerShell 将其视为标准输出。

相关内容