【发布时间】:2019-02-03 22:42:49
【问题描述】:
我有一个相当简单的 PS 脚本,它运行良好,但现在突然开始出错。我已将问题部分缩小到几个 Get-Content 语句。以下是脚本受影响部分的样子:
$pathSource = "D:\FileDirectory"
Set-Location -Path $pathSource
Get-Content -Encoding UTF8 -Path FilesA*.txt | Out-File -Encoding ASCII FilesA_Digest.txt
Get-Content -Encoding UTF8 -Path FilesB*.txt | Out-File -Encoding ASCII FilesB_Digest.txt
这部分脚本收集了一组同名文件并将它们连接成一个文本文件以上传到 FTP 站点。需要 Get-Content/Out-File,因为 FTP 站点的原始文件编码不正确。该脚本运行良好,每晚运行一次,持续数周。现在,当到达 Get-Content 语句时,它会收到以下错误:
Get-Content : A parameter cannot be found that matches parameter name 'Encoding'.
At D:\FileDirectory\Script.ps1
环境是 Windows Server 2016。我在 Get-Content 参数上尝试了不同的变体,但没有任何效果。我知道有一个错误会影响网络映射驱动器,但这里不是这种情况——所有文件都是本地文件。
有什么想法/建议吗?
【问题讨论】:
-
-Path FilesA*.txt将在连续运行中包含 Out-FileFilesA_Digest.txt。 -
顺便说一句:将
-Encoding ASCII应用于(最初)UTF-8 编码的数据可能会导致信息丢失:输入中的任何字符都在 ASCII 之外范围将被音译为 literal?字符。 (相比之下,如果原始数据包含 only ASCII 范围的字符,则根本不需要转码,因为 UTF-8 是 ASCII 的 超集。) -
@LotPings -- 这是我的错字,因为我使用的虚拟文件名实际上与原始脚本不匹配。原始脚本不存在这个问题。
-
@mklelement0 -- 我意识到可能存在数据丢失问题,但事实是不会有,因为源文件不包含标准 ASCII 集之外的任何字符。
-
@npowroz:我明白了,但这与您的说法“原始文件编码不正确”相矛盾:如果您可以使用
-Encoding UTF8正确读取它们并且它们只包含 ASCII -range 字符,你根本不需要任何转码。
标签: powershell