Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Экранирование кавычек

Ответить
Настройки темы
PowerShell - Экранирование кавычек

Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Добрый день.

Есть скрипт, который ищет в почтовом ящике пользователя письмо по параметрам.
Параметры для поиска письма берутся из MessageTrackingLog

Код: Выделить весь код
$message = Get-MessageTrackingLog -EventID "RECEIVE" -MessageID "$messageID"
$date = $message.Timestamp.ToString("dd\/MM\/yyyy")
$to = $message.Recipients -join "," # преобразовываем массив в строку
$query = "subject:" + "'" + $message.MessageSubject + "'" + " " + "from:" + $message.Sender + " " + '"' + "to:" + '"' + $to + " " + "sent:" + $date 
Search-Mailbox -Identity $mailbox -SearchQuery {$query} -TargetMailbox admin -TargetFolder "test" -LogOnly -LogLevel Full
Проблема заключается в том, что если в теме письма будет, что-то типа:
Предупреждение Backup: Задание выполнено (Сервер: "Server1") (Задание:"Start1")
То эти кавычки ломают весь запрос $query.
Подскажите, как можно решить проблему? Какое-то динамическое экранирование кавычек или какое-то глобальное экранирование может быть?

Отправлено: 16:28, 09-10-2015

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Код: Выделить весь код
$s = '(Сервер: "Server1") (Задание:"Start1")'
$s -replace [Char]34, '\"'
Что за, простите, ерунда?
Цитата pogp:
$query = "subject:" + "'" + $message.MessageSubject + "'" + " " + "from:"...
Какбэ...
Код: Выделить весь код
$query = "subject:'" + $message.MessageSubject + "' from:'" ...

Последний раз редактировалось greg zakharov, 09-10-2015 в 16:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 09-10-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


проблема в том, что тема письма может быть любой, это я привел как один из примеров, на котором кавычки сломали запрос.
Так что вариант ручной записи строки в переменную
Код: Выделить весь код
$s = '(Сервер: "Server1") (Задание:"Start1")'
не подходит.

P.S. Поясните пожалуйста, что делает вторая приведенная вами строка?

Отправлено: 16:48, 09-10-2015 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Причем здесь запись в переменную?
Код: Выделить весь код
'(Сервер: "Server1") (Задание:"Start1")' -replace [Char]34, '\"'
Неужно так трудно в хосте посмотреть результат?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:54, 09-10-2015 | #4


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Подскажите, как можно модифицировать запись
Код: Выделить весь код
$s = '(Сервер: "Server1") (Задание:"Start1")'
$s -replace [Char]34, '\"'
Так, что бы не только двойные кавычки экранировались, но и другие спец символы, такие как одинарные кавычки, $, %, & ?

Отправлено: 11:17, 12-10-2015 | #5


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


pogo, Сразу прописывайте вместо символов нужный номер символа:
Код: Выделить весь код
[int[]][char[]]("$", "%", "&","'",'"')
36
37
38
39
34
Код: Выделить весь код
$s = "(Сервер: $([char]34)Server1$([char]34)) (Задание:$([char]34)Start1$([char]34))"

Отправлено: 12:36, 12-10-2015 | #6


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Коды я в таблице нашёл, а как их в -replace засунуть, что-то пока не соображу.
Или может подскажете как должен выглядеть конечный запрос код.

Отправлено: 12:47, 12-10-2015 | #7


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


pogo, Выше показали... Если правильно понял:

Код: Выделить весь код
$subject = ($message.MessageSubject) -replace [char]34,'\"' -replace [char]39,"\'" -replace ......
$query = "subject:" + "'" + $subject + "'"....
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:02, 12-10-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Foreigner, может сразу одним regexp'ом?

Отправлено: 18:12, 12-10-2015 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
-replace "(\""|'|\$|%|&|\?)",'\$1'
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 12-10-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Экранирование кавычек

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Экранирование восклицательного знака Cosmogor Скриптовые языки администрирования Windows 4 02-11-2023 14:34
Разное - [решено] Обработка кавычек в семерке pve Microsoft Windows 7 6 28-01-2010 08:03
Экранирование оператора mihan81 Хочу все знать 12 12-05-2009 14:15
Разное - [решено] передача кавычек в XmlHttpRequest harrique Программирование и базы данных 3 26-01-2009 08:29
СКС/Passive - Сетевой кабель. Заземление. Экранирование. Внешняя прокладка. Категории. Раскладка. Tat Сетевое оборудование 118 23-03-2007 22:55




 
Переход