有没有办法在 PowerShell 5.1 中为 Out-File 设置默认的 EOL 分隔符?

Is there a way to set the default EOL separator for Out-File in PowerShell 5.1?

我正在寻找一种在使用 Out-File.

编写文本时将默认 EOL 标记设置为 0x0A 的方法

在互联网上,我发现了很多例子,要么在文件已经写入后替换 0x0D 0x0A,要么 -join 0x0A 上的行,然后将连接的文本写入文件。

我发现这两种方法都有些笨拙,因为我只想使用重定向运算符 >.

编写文件

那么,有没有办法在 PowerShell 5.1 中设置 EOL 样式?

不,不幸的是,从 PowerShell 7.2 开始,没有 方法让 PowerShell 使用不同的换行符(EOL,换行符)格式。

总是使用 platform-native 换行符或序列(如 [Environment]::NewLine 中所反映的)——既用于分隔多个输入对象,也用于默认情况下 尾随 换行符。

要控制换行格式,您需要:

  • 使用 -join 运算符将输入对象显式地与所选的换行符(序列)连接起来,然后是 another 实例,如果尾随 需要换行...

  • ...使用Set-Content/Out-File-NoNewLine开关(代替>) 以防止附加 trailing platform-native 换行符。

至于未来可能的改进:

  • GitHub feature request #2872建议在Set-Content中增加一个参数,具体来说就是允许指定换行格式;该请求已 green-lighted(很久以前),但尚未实施 - 但是,我认为它不够全面,并且对 Out-File / [=16 没有帮助=];看下一点。

  • GitHub feature request #3855 更普遍地要求将 -Delimiter 参数(以该名称镜像 Get-Content 的现有参数)添加到 Set-Content / Add-ContentOut-FileOut-String

    • 很遗憾,提案被拒绝了;如果没有,您将能够配置 > - Out-File 的虚拟别名 - 使用 LF-only 换行符,例如,如下所示:

      # WISHFUL THINKING 
      $PSDefaultParameterValues['Out-File:Delimiter'] = "`n"