嘗試以下操作:
$file = 'D:\home\App_Config\Sitecore.config'
$regex = '(?<=<setting name="Media\.MediaLinkServerUrl" value=")[^"]*'
(Get-Content $file) -replace $regex, 'https://newurl.com' | Set-Content $file
上Set-Content
的說明:默認情況下它使用系統的舊的單字節字符編碼,因此您可能想要使用-Encoding
明確控制輸出文件的編碼。
還請注意所需的(...)
圍繞Get-Content
調用,以確保管道可以回寫到Get-Content
已讀取的文件。
由於使用正則表達式來匹配您的現有設置,任何目前內部value="..."
文本匹配,如此反覆運行此命令時,會甚至工作。
你的命令中使用的有效文字(... value=" "
)來查找替換,和之後的第一次 - 成功 - 運行,即字面不再匹配,和後續運行失敗。
@neha自從在每次運行之前聲明值爲手動重置,因此問題中代碼間歇性故障的原因仍然未知。但是,這裏介紹的解決方案似乎工作。
上面的命令使用一個簡化的方法來替代:
(?<=<setting name="Media.MediaLinkServerUrl" value=")
是向後看斷言((?<=...)
)匹配,但沒有抓住它匹配的:它找到的部分達幷包括您想要替換的值的開頭"
,而不會將該前綴部分替換爲所要替換的內容。
[^"]*
然後匹配整個值,直到但不包括關閉"
。 ([^"]
是比"
任何字符其他(^
)相匹配的字符集,並且*
發現這樣的字符的任何(可能是空的)序列。
因此,由於正則表達式捕獲僅值本身,所有你需要指定的替換字符串是新值。
不好意思,找出關鍵字? –
很抱歉的打字錯誤。可能是我寫的所有在一行,這就是爲什麼它是工作間歇。 – neha
' .Replace()'是.NET類型'[string]'的_method_,而不是一個_operator_。與PowerShell使用正則表達式的'-replace'運算符不同,'.Replace()'執行_literal_子字符串替換,我懷疑這可能是neha的問題:在初始(成功)運行腳本之後,文本不再匹配。 – mklement0