次のPowerShellスクリプトがあります。
$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)"
$NullSessionPipes
$NullSessionPipes = $NullSessionPipes.replace("browser", "")
$NullSessionPipes
調べるレジストリキーが、指定したケース「ブラウザ」と完全に一致する限り、スクリプトは正常に機能します。
ただし、レジストリキーの大文字と小文字が異なる場合は、「BROWSER」または「Browser」と言っても、置換は行われません。
String.replaceで大文字と小文字を区別しない方法を探しています。比較を容易にするために、最初に.tolowerまたは.toupperを使用して文字列を変換できることはわかっていますが、この特定のレジストリキーまたはそれにアクセスするアプリケーションで大文字と小文字が区別されるかどうかはわからないため、大文字と小文字を変更したくない既存のキー。
これを行う簡単な方法はありますか?
私を知識人と呼んでください、しかしここで誰も完全に間違っていたわけではありませんが、誰も最終的な解決策のための正しいコードを提供していませんでした。
この行を変更する必要があります:
$NullSessionPipes = $NullSessionPipes.replace("browser", "")
これに:
$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape("browser"), ""
文字列に正規表現文字(例:* + []()など)がない限り、奇妙な[regex]テキストは厳密には必要ありません。しかし、あなたはそれでより安全です。この構文は変数でも機能します。
$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape($stringToReplace), $stringToReplaceItWith
NullSessionPipesは複数の文字列値であり、複数の文字列が含まれていると、置換メソッド(大文字と小文字が区別されることに加えて)が失敗する場合があります。 -replace演算子を使用できます。デフォルトでは、すべての比較演算子は大文字と小文字を区別しません。大文字と小文字を区別する演算子は、-creplace、-ceqなどのように「c」で始まります。
'i'で始まる演算子は、-ireplace、-ieqのように大文字と小文字を区別せず、-replace、-ieqと同じです。
詳細については、about_Comparison_Operatorsを参照してください。
代わりに正規表現の置換を使用してください:
$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)"
$NullSessionPipes
$NullSessionPipes = $NullSessionPipes -replace "browser", ""
$NullSessionPipes
.Replace
メソッドには大文字と小文字の区別がないオプションinがありません:
String.Replaceメソッド
...このメソッドは、序数(case-sensitiveおよびculture-insensitive)検索を実行します...
https://msdn.Microsoft.com/en-us/library/fk49wtc1(v = vs.110).aspx
この質問に対する他の回答は、-replace
または-ireplace
、正規表現の置換を使用する場合は問題ありません。ただし、@ボブが彼(彼女?)のコメントで言及しているように、これは常に適切であるとは限りません。たとえば、置換テキストに$ _などのリテラル文字列を含める場合などです。
他の大文字と小文字を区別する場所から借用した1つのトリックは、「入力」文字列と「検索」文字列を小文字に変換することです。
[PS]> "TeXT".ToLower().Replace("text","NewString")
NewString
ただし...これにより、検索文字列と一致しないものについては出力が小文字になり、許容できない場合があります。
[PS]> "DON'T CHANGE MY TeXT".ToLower().Replace("text","NewString")
don't change my NewString