tee with utf-8 encoding

时间:2015-06-02 21:27:05

标签: powershell encoding tee powershell-v4.0

我正在尝试tee服务器输出到控制台和Powershell 4中的文件。该文件最终使用UTF-16编码,这与我正在使用的其他一些工具不兼容。根据{{​​1}}:

  

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

因此help tee -full不支持更改编码,teetee的帮助不会显示拆分流并使用UTF-8对其进行编码的示例。

Powershell 4中有一种简单的方法Out-File(或以其他方式拆分流)到UTF-8编码的文件吗?

4 个答案:

答案 0 :(得分:11)

一种选择是使用Add-ContentSet-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