我正在尝试tee
服务器输出到控制台和Powershell 4中的文件。该文件最终使用UTF-16编码,这与我正在使用的其他一些工具不兼容。根据{{1}}:
Tee-Object在写入文件时使用Unicode enocding ...
要指定编码,请使用Out-File cmdlet
因此help tee -full
不支持更改编码,tee
和tee
的帮助不会显示拆分流并使用UTF-8对其进行编码的示例。
Powershell 4中有一种简单的方法Out-File
(或以其他方式拆分流)到UTF-8编码的文件吗?
答案 0 :(得分:11)
一种选择是使用Add-Content
或Set-Content
代替Out-File
。
*-Content
cmdlet默认使用ASCII编码,并且有-Passthru
开关,因此您可以写入文件,然后将输入传递到控制台:
Get-Childitem -Name | Set-Content file.txt -Passthru
答案 1 :(得分:4)
您必须使用-Variable
,然后在单独的步骤中将其写入文件。
$data = $null
Get-Process | Tee-Object -Variable data
$data | Out-File -Path $path -Encoding Utf8
乍一看,似乎更容易完全避免tee
,只是捕获变量中的输出,然后将其写入屏幕和文件。
但是由于管道的工作方式,这种方法允许长时间运行的管道在屏幕上显示数据。不幸的是,对于该文件不能说同样的事情,直到事后才能写出来。
另一种方法是推出自己的tee
,可以这么说:
[String]::Empty | Out-File -Path $path # initialize the file since we're appending later
Get-Process | ForEach-Object {
$_ | Out-File $path -Append -Encoding Utf
$_
}
这将写入文件并返回管道,它将随着它的发生而发生。但它可能很慢。
答案 2 :(得分:0)
Tee对象似乎调用了文件外,因此这将使Tee输出utf8:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}
答案 3 :(得分:-1)
首先使用适当的标志创建文件,然后附加到它:
Set-Content out $null -Encoding Unicode
...
cmd1 | tee out -Append
...
cmdn | tee out -Append