#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 на соответствие любому из символов, заключенных в две квадратные скобки с каждого конца.