2012-02-02 122 views
12

我有以下PowerShell腳本:不區分大小寫的PowerShell更換

$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters 
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)" 
$NullSessionPipes 
$NullSessionPipes = $NullSessionPipes.replace("browser", "") 
$NullSessionPipes 

劇本很好,只要工作的註冊表項完全相同檢查我指定的情況下匹配 - 「瀏覽器」。

但是,如果在註冊表項中說「瀏覽器」或「瀏覽器」不同,它不會進行替換。

我正在尋找一些方法使string.replace不區分大小寫。我知道我可以先使用.tolower或.toupper來轉換字符串,以便比較容易,但我不知道這個特定的註冊表項或應用程序是否區分大小寫,因此我不想更改現有密鑰的情況。

有沒有簡單的方法來做到這一點?

由於 布拉德

+1

我想我找到了如何做到這一點 - 以下似乎工作: $ RegExplorer = GET-ItemProperty -Path HKLM:\系統\ CurrentControlSet \服務\ lanmanserver \參數 $ NullSessionPipes =「$ ($ RegExplorer.NullSessionPipes)」 $ NullSessionPipes $ NullSessionPipes = $ NullSessionPipes -ireplace( 「瀏覽器」, 「」) $ NullSessionPipes – Brad 2012-02-02 18:22:19

回答

5

使用正則表達式替換代替:

$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters 
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)" 
$NullSessionPipes 
$NullSessionPipes = $NullSessionPipes -replace "browser", "" 
$NullSessionPipes 
+1

正則表達式替換也有缺點,當你搜索或替換字符串在他們的正則表達式元字符... – Bob 2014-02-15 08:15:19

+1

在這種情況下它是一個靜態已知字符串如果搜索字符串是未知的(一個變量),您可以使用'[regex] :: escape($ search_string)'自動轉義它' – 2014-02-15 17:39:16

10

NullSessionPipes是一個多字符串值和替換方法(除了被區分大小寫),如果有更多的可能失敗而不是一個字符串。您可以使用-replace運算符。默認情況下,所有比較運算符都不區分大小寫。區分大小寫的運算符以'c'開頭,如:-creplace,-ceq等。

以'i'開頭的運算符不區分大小寫,與-ireplace,-ieq一樣,它們與 - 替換,-ieq。

有關更多信息,請參閱about_Comparison_Operators。

+0

正則表達式替換具有缺點,當您的搜索或替換字符串中有正則表達式元字符時... – Bob 2014-02-15 08:14:41

9

叫我迂腐,但雖然這裏沒有人是完全錯誤的,但沒有人提供最終解決方案的正確代碼。

你需要改變這一行:

$NullSessionPipes = $NullSessionPipes.replace("browser", "") 

這樣:

$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape("browser"), "" 

奇怪[正則表達式]文本不是絕對必要的,只要沒有正則表達式字符(如。* + []()等)在您的字符串。但你對它更安全。這句法用於變量太多:

$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape($stringToReplace), $stringToReplaceItWith 
+1

已保存我很多時間。在乾草堆裏尋找一根針,這就解決了這個問題,真的很感激! – DarkLite1 2017-05-19 08:27:17

+0

您可以使用'$ NullSessionPipes = $ NullSessionPipes -ireplace'瀏覽器','「' - 單引號禁用正則表達式 – Marc 2018-02-01 10:09:41

+0

恐怕單引號不會禁用正則表達式,證明:'asdf.qwer' -ireplace'。',「X」 – Ivan 2018-02-25 15:06:06

3

.Replace方法不具有區分敏感選項:

方法與string.replace

...這方法執行序號(區分大小寫和文化不敏感)搜索...

https://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx

其他回答這個問題建議使用-replace-ireplace,如果你想使用正則表達式替換這是罰款。但是,@Bob在他的評論中提到這並不總是合適的。例如,如果您想在替換文本中包含文字字符串,例如$ _。其他情況下,敏感的地方借來

一個竅門是「輸入」字符串和「搜索」字符串爲小寫轉換:

[PS]> "TeXT".ToLower().Replace("text","NewString") 
NewString 

但是...這將導致輸出爲以小寫字母表示與搜索字符串不匹配的任何內容,這可能是不可接受的。

[PS]> "DON'T CHANGE MY TeXT".ToLower().Replace("text","NewString") 
don't change my NewString