Ошибка возникает из-за того, что кавычки (одинарные и двойные) являются специальными символами среды выполнения PowerShell. Они указывают на строку, и если они должны использоваться только в качестве этого символа, их необходимо экранировать.
Возможный обходной путь - экранирование кавычек с обратной косой чертой в зависимости от желаемого результата.
Например, если мой текстовый файл имел
'$foo'
Результирующее расширение этой строки будет
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
$foo
Если вы хотите расширить эту переменную, вам нужно экранировать эти кавычки.
`'$foo`'
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
'foo'
или если вы собираетесь получить непарную одинарную или двойную кавычку, вам нужно будет ее избежать.
Вы можете сделать -замену на строке, чтобы избежать этих символов, но вы должны будете убедиться, что это желаемый эффект по всем направлениям.
PS>$single, $double = "'", '"'
PS>$text = [io.file]::ReadAllText('test.config') -replace "($single|$double)", '`$1'
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
ПРИМЕЧАНИЕ. После того, как вы выполните вызов ExpandString, у вас больше не будет бэкстиков.