有人可以向我解释这种行为吗?怎么了?
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
已创建,但为空,并且输出仍显示在控制台上,而不是定向到文件中。
这不是我所期望的行为。我的思维问题出在哪里?
这里的问题非常基本 - 它来自于缺乏对以下内容的理解
Write-Host
:Write-Information
使用信息流。现在,如果我们看一下流文档:我们可以看到这
6
是发生操作的流编号。这意味着要重定向
Write-Host
到文件,您需要使用:在 PS 5.0 之前,如果有人还在使用这种过时的版本(7 已经发布一段时间了),重定向是不可能的。
但正如另一个答案所述,除非您有
Write-Host
专门使用的目的,否则您可以只使用Write-Output
写入标准输出流(成功,流编号1
)。或者您甚至可以使用隐式输出,即仅使用字符串,PowerShell 假定它是标准输出。您应该使用
Write-Output
asWrite-Host
不写入文件而是写入控制台。用于
>>
向文件追加新内容。