Ang*_*gus 12 powershell encoding tee powershell-4.0
我正在尝试将tee服务器输出到控制台和Powershell 4中的文件.该文件最终使用UTF-16编码,这与我正在使用的其他一些工具不兼容.根据help tee -full:
Tee-Object在写入文件时使用Unicode enocding.
...
要指定编码,请使用Out-File cmdlet
所以tee不支持更改编码,以及两者的帮助,tee并且Out-File不显示任何拆分流并使用UTF-8对其进行编码的示例.
在Powershell 4中有一种简单的方法tee(或以其他方式将流分割)到UTF-8编码的文件中吗?
mjo*_*nor 13
一种选择是使用Add-Content或Set-Content代替Out-File.
该*-Contentcmdlet的默认使用ASCII编码,并有一个-Passthru开关,所以你可以写入文件,然后还要输入通过控制台:
Get-Childitem -Name | Set-Content file.txt -Passthru
Run Code Online (Sandbox Code Playgroud)
Tee-object 似乎调用了 out-file,因此这将使 tee 输出 utf8:
$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}
Run Code Online (Sandbox Code Playgroud)
您必须-Variable在单独的步骤中使用然后将其写出到文件中。
$data = $null
Get-Process | Tee-Object -Variable data
$data | Out-File -Path $path -Encoding Utf8
Run Code Online (Sandbox Code Playgroud)
乍一看,似乎更容易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
$_
}
Run Code Online (Sandbox Code Playgroud)
这将写入文件并返回到管道,它会随着它的进行而发生。不过它可能很慢。