带有utf-8编码的tee

问题描述 投票:11回答:4

我正在尝试tee服务器到控制台的输出以及Powershell 4中的文件。该文件最终以UTF-16编码结尾,该编码与我正在使用的其他一些工具不兼容。根据help tee -full

Tee-Object在写入文件时使用Unicode编码。...要指定编码,请使用Out-File cmdlet

所以tee不支持更改编码,teeOut-File的帮助都没有显示任何拆分流并使用UTF-8对其进行编码的示例。

在Powershell 4中是否有一种简单的方法可以将tee(或以其他方式拆分流)到具有UTF-8编码的文件?

powershell encoding tee powershell-4.0
4个回答
11
投票

一种选择是使用Add-ContentSet-Content代替Out-File

*-Content cmdlet默认情况下使用ASCII编码,并具有-Passthru开关,因此您可以写入文件,然后将输入传递到控制台:

Get-Childitem -Name | Set-Content file.txt -Passthru

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
    $_
}

这将写入文件并返回到管道,并且随着过程的进行会发生。不过可能很慢。


0
投票

Tee对象似乎调用了文件外文件,所以:

$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}

-1
投票

首先使用适当的标志创建文件,然后附加到它:

Set-Content  out $null -Encoding Unicode
...
cmd1 | tee out -Append
...
cmdn | tee out -Append
© www.soinside.com 2019 - 2024. All rights reserved.