基本上,我有一个要更新的.bas文件。基本上,脚本需要一些手动配置,我不希望我的团队在每次运行脚本时都需要重新配置脚本。我想做的就是有一个这样的标签
<BEGINREPLACEMENT>
'MsgBox ("Loaded")
ReDim Preserve STIGArray(i - 1)
ReDim Preserve SVID(i - 1)
STIGArray = RemoveDupes(STIGArray)
SVID = RemoveDupes(SVID)
<ENDREPLACEMENT>
我对powershell有点熟悉,所以我想做的就是创建一个更新文件,并用更新替换标签之间的内容。我想做的是:
$temp = Get-Content C:\Temp\file.bas
$update = Get-Content C:\Temp\update
$regex = "<BEGINREPLACEMENT>(.*?)<ENDREPLACEMENT>"
$temp -replace $regex, $update
$temp | Out-File C:\Temp\file.bas
问题在于它不会替换文本块。我可以用它代替它,或者也不能在两者之间插入所有东西。
有人对我该怎么做有想法吗?
答案 0 :(得分:1)
您需要确保以换行符读取整个文件,这可以通过将-Raw
选项传递给Get-Content
来实现。
然后,.
默认不与换行符匹配,因此您需要使用(?s)
内联DOTALL(或“单行”)选项。
此外,如果您的动态内容包含类似$2
之类的内容,则可能会遇到异常,因为这是对模式2的第二组的反向引用。您需要通过将其中的每个$
加倍来处理替换字符串。
$temp = Get-Content C:\Temp\file.bas -Raw
$update = Get-Content C:\Temp\update -Raw
$regex = "(?s)<BEGINREPLACEMENT>.*?<ENDREPLACEMENT>"
$temp -replace $regex, $update.Replace('$', '$$')