![]() |
Экранирование кавычек
Добрый день.
Есть скрипт, который ищет в почтовом ящике пользователя письмо по параметрам. Параметры для поиска письма берутся из MessageTrackingLog Код:
$message = Get-MessageTrackingLog -EventID "RECEIVE" -MessageID "$messageID" Предупреждение Backup: Задание выполнено (Сервер: "Server1") (Задание:"Start1") То эти кавычки ломают весь запрос $query. Подскажите, как можно решить проблему? Какое-то динамическое экранирование кавычек или какое-то глобальное экранирование может быть? |
Код:
$s = '(Сервер: "Server1") (Задание:"Start1")' Цитата:
Код:
$query = "subject:'" + $message.MessageSubject + "' from:'" ... |
проблема в том, что тема письма может быть любой, это я привел как один из примеров, на котором кавычки сломали запрос.
Так что вариант ручной записи строки в переменную Код:
$s = '(Сервер: "Server1") (Задание:"Start1")' P.S. Поясните пожалуйста, что делает вторая приведенная вами строка? |
Причем здесь запись в переменную?
Код:
'(Сервер: "Server1") (Задание:"Start1")' -replace [Char]34, '\"' |
Подскажите, как можно модифицировать запись
Код:
$s = '(Сервер: "Server1") (Задание:"Start1")' |
pogo, Сразу прописывайте вместо символов нужный номер символа:
Код:
[int[]][char[]]("$", "%", "&","'",'"') Код:
$s = "(Сервер: $([char]34)Server1$([char]34)) (Задание:$([char]34)Start1$([char]34))" |
Коды я в таблице нашёл, а как их в -replace засунуть, что-то пока не соображу.
Или может подскажете как должен выглядеть конечный запрос код. |
pogo, Выше показали... Если правильно понял:
Код:
$subject = ($message.MessageSubject) -replace [char]34,'\"' -replace [char]39,"\'" -replace ...... |
Foreigner, может сразу одним regexp'ом?
|
Код:
-replace "(\""|'|\$|%|&|\?)",'\$1' |
или так:
Код:
-replace "(['`"$%&])",'\$1' |
Цитата:
1. экранирование в ps делается не \, а ` 2. что бы заэкранировать одинарные кавычки, вторая часть выражения, должны быть в двойных (, "`'"), а что бы заэкранировать двойные, она должна быть в одинарный (, '`"') если ошибаюсь пожалуйста поправьте. |
pogo, Во всех предыдущих примерах экранирование производится обратным слешем, вы определитесь чем надо экранировать в теле отправляемого сообщения. Для меня такой задачи нет по определению, я не работаю в IT сфере (даже нет компьютера), поэтому не могу дать исчерпывающий ответ. Что касается экранирования '`' или '\' в powershell, то ситуации бывают разные. Попробуйте:
Код:
('str\ing') -split "\\" |
Время: 21:59. |
Время: 21:59.
© OSzone.net 2001-