Ошибка с Get-Content

#powershell

#powershell

Вопрос:

У меня есть следующая часть кода:

 $fileList | foreach {
Write-Host ". . . adding $_ to script"
$myCreateScript  = Get-Content "$ScriptRoot$_" | Out-String }
  

Это приводит к следующему к концу выполнения:

ItemNotFound, Microsoft.PowerShell.Команды.Система GetContentCommand.Исключение: объект по указанному пути E:Scriptsusers [[FILE_NAME_LOWER]]_administrator.sql не существует или был отфильтрован параметром -Include или -Exclude.

[[FILE_NAME_LOWER]]_administrator.sql — это имя файла, и он существует в указанном каталоге. Если это проблема с тем фактом, что имя файла содержит квадратные скобки ([]), мне нужно знать, как решить ее в блоке foreach, поскольку я не могу легко изменить имена файлов (они используются в другом месте кода, который находится в системе управления версиями) и из-за предыдущего кода в сценарии,необходимо сохранить в $FileList . Я подозреваю, что проблема в скобках, потому что в $FileList более 200 строк, а $myCreateScript заполняется правильными данными до этого момента.

Комментарии:

1. Правильный ли путь или должен быть after E:Scriptsusers а перед именем файла?

2. опечатка с моей стороны (я изменил путь к сообщению). Перед именем файла стоит ».

Ответ №1:

Вам необходимо использовать -LiteralPath параметр Get-Content :

 $myCreateScript  = Get-Content -LiteralPath "$ScriptRoot$_" | Out-String }
  

В противном случае [[FILE_NAME_LOWER]] будет интерпретироваться как набор символов с подстановочными знаками, который указывает PowerShell на соответствие любому из символов, заключенных в две квадратные скобки с каждого конца.