Единственное правдоподобное объяснение, которое я могу придумать, состоит в том, что пользовательская команда *1003* Get-Content
, в которой отсутствует параметр -Encoding
, является затенение (переопределение) стандартным Get-Content
cmdlet в сеансе PowerShell, в котором выполняется ваш сценарий.
Для демонстрации:
# 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
, с первой в списке командой ffective .
Затем проверьте, откуда могут поступать любые пользовательские команды;например, ваш $PROFILE
сценарий может содержать один.
К исключить $PROFILE
в качестве виновника , запустить PowerShell без загрузки сценария профиля и проверить Get-Content
, затем:
powershell -noprofile # Windows PowerShell
pwsh -noprofile # PowerShell Core
A простой способ исключить пользовательские переопределения ad hoc заключается в вызове команды по ее квалифицированному имени модуля :
Microsoft.Powershell.Management\Get-Content ...
Вы можете определить имя источника встроенного командлета следующим образом:
PS> (Get-Command Get-Content -All)[-1].ModuleName
Microsoft.PowerShell.Management
В крайнем случае вы также можете сделать вывод имя исходного модуля из URL-адреса раздела справки :