【发布时间】:2021-03-29 02:37:45
【问题描述】:
我正在尝试使用 powershell 脚本更改两个字符串之间的密码,我遇到了两个问题。
- 一个复杂的密码似乎会破坏我的正则表达式,如果我使用像“TestPassword”这样简单的东西,那么正则表达式就会达到我的预期。但是使用更复杂的密码 "6QAfD5PmMhWzUxTq1FO1bGJQQXRXu6tizN29h6MRUSI=" 它会中断并导致
SSLEnabled="true" keystoreFile="C:\cert.pfx" $16QAfD5PmMhWzUxTq1FO1bGJQQXRXu6tizN29h6MRUSI=" keystoreType="PKCS12"/>
而不是
SSLEnabled="true" keystoreFile="C:\cert.pfx" keystorePass="6QAfD5PmMhWzUxTq1FO1bGJQQXRXu6tizN29h6MRUSI=" keystoreType="PKCS12"/>
- 我希望对第二个匹配组不那么具体,例如,此时我必须指定 '" keystoreType' 但我希望不那么具体,只指定结束引号。这样,如果我更改将来的 keystoreType 参数我不必担心更改正则表达式以适应。
Bellow 是我的 powershell:
#Set new password in server.xml
$pass='6QAfD5PmMhWzUxTq1FO1bGJQQXRXu6tizN29h6MRUSI='
$server_xml=".\server.xml"
(Get-Content $server_xml) -replace '(keystorePass=")(.*)(" keystoreType)',('$1{0}$3' -f "$pass") | Set-Content $server_xml
下面是我的 xml 的摘录:
<Connector port="443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>"
maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
acceptCount="100" disableUploadTimeout="true" bindOnInit="false" secure="true" scheme="https"
proxyName="test.example.com" proxyPort="443"
SSLEnabled="true" keystoreFile="C:\cert.pfx" keystorePass="123abc" keystoreType="PKCS12"/>
【问题讨论】:
-
您也可以考虑使用 xml 解析器。
标签: regex xml powershell