使用 utf-8 编码的 tee
tee with utf-8 encoding
我正在尝试 tee
服务器的输出到控制台和 Powershell 4 中的文件。该文件以 UTF-16 编码结尾,这与我的其他一些工具不兼容我正在使用。根据 help tee -full
:
Tee-Object uses Unicode enocding when it writes to files.
...
To specify the encoding, use the Out-File cmdlet
因此 tee
不支持更改编码,并且 tee
和 Out-File
的帮助没有显示任何拆分流并使用 UTF 编码的示例- 8.
Powershell 4 中是否有简单的方法 tee
(或以其他方式拆分流)到具有 UTF-8 编码的文件?
您必须使用 -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
$_
}
这将写入文件并返回到管道,它会随着它的进行而发生。虽然它可能很慢。
一种选择是使用 Add-Content
或 Set-Content
而不是 Out-File
。
*-Content
cmdlet 默认使用 ASCII 编码,并有一个 -Passthru
开关,因此您可以写入文件,然后将输入传递到控制台:
Get-Childitem -Name | Set-Content file.txt -Passthru
首先使用适当的标志创建文件,然后附加到它:
Set-Content out $null -Encoding Unicode
...
cmd1 | tee out -Append
...
cmdn | tee out -Append
Tee-object 似乎调用了 out-file,所以这将使 tee 输出为 utf8:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}
我正在尝试 tee
服务器的输出到控制台和 Powershell 4 中的文件。该文件以 UTF-16 编码结尾,这与我的其他一些工具不兼容我正在使用。根据 help tee -full
:
Tee-Object uses Unicode enocding when it writes to files.
...
To specify the encoding, use the Out-File cmdlet
因此 tee
不支持更改编码,并且 tee
和 Out-File
的帮助没有显示任何拆分流并使用 UTF 编码的示例- 8.
Powershell 4 中是否有简单的方法 tee
(或以其他方式拆分流)到具有 UTF-8 编码的文件?
您必须使用 -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
$_
}
这将写入文件并返回到管道,它会随着它的进行而发生。虽然它可能很慢。
一种选择是使用 Add-Content
或 Set-Content
而不是 Out-File
。
*-Content
cmdlet 默认使用 ASCII 编码,并有一个 -Passthru
开关,因此您可以写入文件,然后将输入传递到控制台:
Get-Childitem -Name | Set-Content file.txt -Passthru
首先使用适当的标志创建文件,然后附加到它:
Set-Content out $null -Encoding Unicode
...
cmd1 | tee out -Append
...
cmdn | tee out -Append
Tee-object 似乎调用了 out-file,所以这将使 tee 输出为 utf8:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}