2013-02-11 19 views
7

से उद्धरण चिह्नों को हटाएं या बदलें, मैं एक चर सेट करने के लिए Get-EventLog का उपयोग कर रहा हूं, और फिर ईवेंट आईडी विवरण के साथ एक और चर सेट कर रहा हूं। मैं फिर इस जानकारी को किसी समूह को ईमेल करने के लिए blat.exe का उपयोग करता हूं।पावरशेल: परिवर्तनीय

विवरण में उद्धरण चिह्न शामिल हैं। उद्धरण चिह्न त्रुटियों से बाहर निकलने के लिए ब्लाइट का कारण बन रहे हैं।

क्या घटना से उद्धरण हटाने का कोई तरीका है। संदेश और उन्हें किसी स्थान या किसी चीज़ से प्रतिस्थापित करें?

उत्तर

7

मुझे वास्तव में यह अभी मिला। उद्धरण और डबल कोट्स की संख्या मुझे भ्रमित कर रही थी, लेकिन इसने काम किया है और ब्लैट त्रुटि नहीं मिली है।

$var -replace '"', "" 

ये उद्धरण हैं: सिंगल, डबल, सिंगल, कॉमा, डबल, डबल।

13

चर स्ट्रिंग ऑब्जेक्ट तो आप क्या कर सकते हैं, तो निम्न:

$Variable.Replace("`"","") 
3

तो आप का उपयोग Powershell के अंतर्निहित send-mailmessage (2.0) की आवश्यकता है, तो आप blat.exe से अपनी निर्भरता समाप्त कर सकते हैं और ठीक से इस मुद्दे को संभालने घटना लॉग से विवरण संपादित किए बिना।

+0

महान बिंदु। उस – Pat

2

समस्या यह है कि एक साधारण प्रतिस्थापन प्रत्येक उद्धरण चरित्र को साफ़ करता है, भले ही बच निकला हो (दोगुना हो)। यहां मेरे द्वारा उपयोग किए जाने वाले कार्यों को शामिल किया गया है:

  • जो केवल अनाथ उद्धरण हटा देता है।
  • एक है जो उन्हें निकल जाता

मैं भी उन्हें अन्य पात्रों का प्रबंधन करने के लिए सामान्य, 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' 
0

कोई भी काम के साथ बनाया मेरे लिए। तो मैं निम्नलिखित समाधान ...

खोजें बनाया है और चरित्र एकल उद्धरण " '" ASCII वर्ण (39) एक अंतरिक्ष के साथ "" ASCII वर्ण (32)

$strOldText = [char] 39 
$strNewText = [char] 32 

$Variable. = $Variable..Replace($strOldText, $strNewText).Trim() 
+0

में देखेंगे इस प्रश्न का उत्तर 4 साल पहले ही दिया जा चुका है। उस ने कहा, आपका नया उत्तर कोई संदर्भ प्रदान नहीं करता है।क्या आप कृपया संपादित कर सकते हैं और समझा सकते हैं कि आप किस बारे में बात कर रहे हैं? – Pat

+0

यदि यह प्रश्न पिछले 4 वर्षों से खोजा या खोला नहीं गया था, तो यह बेहतर/वैकल्पिक उत्तर प्रदान करने का प्रयास करने के लिए केवल बेकार होगा। ट्रिम() वास्तव में स्ट्रिंग के प्रारंभ/अंत से "ट्रिमिंग" वर्णों के लिए बनाई गई विधि है। यह अभी भी इस मामले में सही नहीं है, क्योंकि ट्रिम (चर []) के लिए अधिक उपयुक्त अधिभारित संस्करण भी है। सरल और स्ट्रिंग के अंदर से बच निकले उद्धरण और संभावित इच्छित व्हाइटस्पेस को नहीं हटाएगा। मेरा जवाब देखें। – papo

0

सरल, Trim(Char[]) method का उपयोग बदलें:
... सभी प्रमुख और अनुगामी घटनाओं को निकालता है ...

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