我有一个可以正常使用一个相当简单的PS脚本,而现在却突然开始给错误。我已经缩小了问题部分的一对夫妇获取内容的语句。下面是该脚本的患部的样子:
$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站点单个文本文件。需要在获取内容/ OUT-文件作为原始文件FTP站点编码不正确。该脚本可以正常使用,每天晚上几个星期跑一次。现在,它得到当达到获取内容的语句以下错误:
Get-Content : A parameter cannot be found that matches parameter name 'Encoding'.
At D:\FileDirectory\Script.ps1
环境是Windows服务器2016年我已经试过在获取内容参数不同的变化,但没有奏效。我知道有是影响网络映射驱动器的错误,但这里并非如此 - 所有文件都是本地的。
任何意见/建议吗?
我能想到的唯一合理的解释是,缺乏一个Get-Content
参数自定义-Encoding
命令被遮蔽(重写)在对正在执行脚本的PowerShell会话标准Get-Content
cmdlet的。
展示:
# Define a custom Get-Content command (function) that accepts only
# a (positional) -Path parameter, not also -Encoding.
function Get-Content { [CmdletBinding()] param([string] $Path) }
# Now try to use Get-Content -Encoding
Get-Content -Encoding Utf8 FilesA*.txt
你会看到相同的错误消息,在你的问题。
使用Get-Command Get-Content -All
看到名为Get-Content
所有的命令,首先列出了有效的指挥。
然后检查其中任何自定义命令可能来自;例如,你的$PROFILE
脚本可能包含一个。
为了排除$PROFILE
的罪魁祸首,开始的PowerShell而不加载配置文件脚本,检查Get-Content
则:
powershell -noprofile # Windows PowerShell
pwsh -noprofile # PowerShell Core
一个简单的方法来排除定制覆盖专案是由它的模块限定名称来调用命令:
Microsoft.Powershell.Management\Get-Content ...
您可以确定如下起源的内置小命令的模块名称:
PS> (Get-Command Get-Content -All)[-1].ModuleName
Microsoft.PowerShell.Management
在紧要关头,你也可以从帮助主题的URL推断,始发模块名称:
Get-Content
将带你到https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content - 注意如何在cmdlet的模块名称,microsoft.powershell.management
(不区分大小写),是倒数第二(倒数第二),URI组件。这似乎与停止命令的问题。你可以请尝试以下代码:
$pathSource = "D:\FileDirectory"
Set-Location -Path $pathSource
Get-Content -Encoding UTF8 -Path FilesA*.txt | Set-Content -Encoding ASCII -path FilesA_Digest.txt
Get-Content -Encoding UTF8 -Path FilesB*.txt | Set-Content -Encoding ASCII -path FilesB_Digest.txt
好了,我不知道为什么会失败,但我可以说,我已经完全重新编写剧本,现在它的工作原理。我必须要注意的是,考虑到正在发生的错误,我也不知道为什么它现在的工作。
我使用到获取内容的命令行开关完全相同的电话,与-Encoding参数和管外的文件有自己的-Encoding参数。我做同样的动作在之前版本的脚本。即显著不同的唯一部分是执行处理的文件的FTP传输的部分。现在我只使用PowerShell来进行传输,而不是CuteFTP的,这一切似乎是正常工作。
谢谢大家谁作出了贡献。
干杯规范