Как обойти использование апострофа в двойных кавычках с Powershell - PullRequest
1 голос
/ 11 марта 2020

Я работаю с Powershell. Моя проблема в том, что мой путь к файлу (который не существует на локальном компьютере) содержит апостроф. Powershell рассматривает это как одиночную кавычку, поэтому выдает следующую ошибку: В строке отсутствует терминатор: '. Я думал, что смогу избежать одиночной кавычки, используя обратную косую черту, но это дало мне та же ошибка.

Ошибка не возникает, когда я делаю первую строку кода, и мне даже не нужен обратный удар для этой части. Я даже вижу, что содержимое переменной соответствует пути к файлу, который я использую. Только когда я выполняю часть выражения invoke, это дает мне ошибку.

Я использую https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7, поэтому я не думаю, что вторая строка проблема в коде.

Мой код указан ниже:

$code = "\\example\example\John_Doe`'s_Folder\example.ps1"
invoke-expression -command $code

Я также пытался обернуть весь путь к файлу в двойные и одинарные кавычки, но моя программа не понравилась что либо. Я не могу удалить апостроф, так как у нас более ста систем, которые направляют в John_Doe's_Folder.

1 Ответ

1 голос
/ 11 марта 2020

Invoke-Expression обычно следует избегать ; определенно не используйте его для вызова скрипта или внешней программы .

В вашем случае просто используйте &, оператор вызова для вызова вашего скрипта через путь хранится в переменной $code (см. этот ответ для справочной информации), и в этом случае встроенный ' вообще не нуждается в экранировании:

$code = "\\example\example\John_Doe's_Folder\example.ps1"
& $code

Как для то, что вы пытались :

"\\example\example\John_Doe`'s_Folder\example.ps1" превращается в следующее дословно строковое содержимое:

\\example\example\John_Doe's_Folder\example.ps1

То есть ` был удален при разборе PowerShell самого строкового литерала "...", внутри которого ` выступает в качестве escape-символа; Поскольку escape-последовательность `' не имеет особого значения, ` просто удалено .

Чтобы ` "выжил", вам необходимо избежать ` симв. сам , что вы можете сделать с ``:

"\\example\example\John_Doe``'s_Folder\example.ps1"
...