我尝试在另一个PowerShell文件中替换一些字符串。
$Source_IP = Read-Host 'Enter source IP'
$Target_IP = Read-Host 'Enter target IP'
通过在另一个PowerShell脚本中使用以下行,该文件显示为已修改,但更改不会生效。
(Get-Content "C:\Solutions.ps1") -replace "$Target_IP = Read-Host 'Enter target IP'", "$Target_IP = '192.168.0.221'" | Set-Content "C:\Solutions.ps1"
这些变化是否有效?
这是在Windows Server 2008上以管理员身份运行,而我认为是PowerShell版本2.
答案 0 :(得分:2)
作为PetSerAl points out,-replace
比较运算符支持正则表达式。虽然您可以在模式中使用某种程度的表达式,但是您添加了不必要的复杂性,尤其是因为您只是使用简单的匹配。
更简单的解决方案是使用字符串方法.Replace()
。
$filePath = "C:\Solutions.ps1"
(Get-Content $filePath).Replace($Source_IP,$Target_IP) | Set-Content $filePath
请注意,.Replace()
区分大小写。如果您只是替换IP地址,那么这是一个没有实际意义的问题。我不确定你为什么遇到第二个文件的问题。
答案 1 :(得分:0)
只是要指出,对于前面所说的,-replace运算符支持正则表达式,并且在正则表达式中你必须使用\来转义搜索字符串中的$等特殊字符,而且你使用双引号字符串,所以你必须在搜索和替换字符串中的$ with powershell转义字符`之前转义,因此命令应该是(现在不能尝试):
(Get-Content "C:\Solutions.ps1") -replace "\`$Target_IP = Read-Host 'Enter target IP'", "`$Target_IP = '192.168.0.221'" | Set-Content "C:\Solutions.ps1"