使用PowerShell在文件中替换字符串

时间:2016-01-28 13:04:56

标签: powershell

我尝试在另一个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.

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"