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

Вопрос:

Я использую 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

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