尝试以下操作:
$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