PowerShell: удалить или заменить кавычки из переменной

Вопрос:Я использую Get-EventLog для установки переменной, а затем устанавливаю другую переменную с описанием идентификатора события. Затем я использую blat.exe для отправки этой информации в группу. Описание содержит кавычки. Кавычки заставляют blat выйти с ошибкой. Есть ли способ удалить кавычки из события. Сообщение и заменить их пробелом или чем-то? Лучший ответ: Я просто получил его. Количество

Вопрос:

Я использую Get-EventLog для установки переменной, а затем устанавливаю другую переменную с описанием идентификатора события. Затем я использую blat.exe для отправки этой информации в группу.

Описание содержит кавычки. Кавычки заставляют blat выйти с ошибкой.

Есть ли способ удалить кавычки из события. Сообщение и заменить их пробелом или чем-то?

Лучший ответ:

Я просто получил его. Количество котировок и двойных кавычек меня сбивало с толку, но это сработало, и blat не ошибся.

$var -replace ‘»‘, «»

Эти кавычки: одиночные, двойные, одиночные, запятые, двойные, двойные.

Ответ №1

Если переменная является объектом String, вы можете сделать следующее:

$Variable.Replace(«`»»,»») Ответ №2

Если вы используете встроенный send-mailmessage (2.0) PowerShell, вы можете устранить свою зависимость от blat.exe и должным образом справиться с этой проблемой, не редактируя описание из журнала событий.

Ответ №3

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

  • который удаляет только сиротские кавычки.
  • который ускользает от них

Я также сделал их обобщенными для управления другими символами, с параметром optionnal $charToReplace

#Replaces single occurences of characters in a string. #Default is to replace single quotes Function RemoveNonEscapedChar { param( [Parameter(Mandatory = $true)][String] $param, [Parameter(Mandatory = $false)][String] $charToReplace ) if ($charToReplace -eq ») { $charToReplace = «‘» } $cleanedString = «» $index = 0 $length = $param.length for ($index = 0; $index -lt $length; $index++) { $char = $param[$index] if ($char -eq $charToReplace) { if ($index +1 -lt $length -and $param[$index + 1] -eq $charToReplace) { $cleanedString += «$charToReplace$charToReplace» ++$index ## /! Manual increment of our loop counter to skip next char /! } continue } $cleanedString += $char } return $cleanedString } #A few test cases : RemoveNonEscapedChar(«‘st»r»’i»ng'») #Echoes st»r»i»ng RemoveNonEscapedChar(«»»st»»»»r»»»»»»i»»»»ng»»») -charToReplace ‘»‘ #Echoes st»»r»»i»»ng RemoveNonEscapedChar(«‘st»r»’i»ng'») -charToReplace ‘r’ #Echoes ‘st»»’i»ng’

#Escapes single occurences of characters in a string. Double occurences are not escaped. e.g. »’ will become »», NOT »»». #Default is to replace single quotes Function EscapeChar { param( [Parameter(Mandatory = $true)][String] $param, [Parameter(Mandatory = $false)][String] $charToEscape ) if ($charToEscape -eq ») { $charToEscape = «‘» } $cleanedString = «» $index = 0 $length = $param.length for ($index = 0; $index -lt $length; $index++) { $char = $param[$index] if ($char -eq $charToEscape) { if ($index +1 -lt $length -and $param[$index + 1] -eq $charToEscape) { ++$index ## /! Manual increment of our loop counter to skip next char /! } $cleanedString += «$charToEscape$charToEscape» continue } $cleanedString += $char } return $cleanedString } #A few test cases : EscapeChar(«‘st»r»’i»ng'») #Echoes »st»r»»i»ng» EscapeChar(«»»st»»»»r»»»»»»i»»»»ng»»») -charToEscape ‘»‘ #Echoes «»st»»r»»»»i»»ng»» EscapeChar(«‘st»r»’i»ng'») -charToEscape ‘r’ #Echoes ‘st»rr»’i»ng’ Ответ №4

Ни один из вышеперечисленных ответов не работал у меня. Поэтому я создал следующее решение…

Поиск и замена символа одиночного Цитата “‘” ascii Персонаж (39) с пробелом “” ascii Персонаж (32)

$strOldText = [char] 39 $strNewText = [char] 32 $Variable. = $Variable..Replace($strOldText, $strNewText).Trim() Ответ №5

проще, используйте метод Trim (Char []):
… Удаляет все ведущие и завершающие события…

e.g. $your_variable.Trim(‘»‘)

он будет хранить любые кавычки, экранированные или нет, внутри строки на месте:

PS C:> $v.Trim(‘»‘) # where $v is: «hu»»hu»hu’hu» hu»»hu»hu’hu

чтобы принять во внимание, он также удалит сиротскую двойную кавычку:

PS C:> $v.Trim(‘»‘) # where $v is: «hu»»hu»hu’hu hu»»hu»hu’hu

Оцените статью
Добавить комментарий