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

Ela*_*rys 5 powershell

我正在尝试替换另一个 PowerShell 文件中的几个字符串。

$Source_IP = Read-Host 'Enter source IP'
$Target_IP = Read-Host 'Enter target IP'
Run Code Online (Sandbox Code Playgroud)

通过在另一个 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"
Run Code Online (Sandbox Code Playgroud)

是否有更改不生效的原因?

我相信这是在 Windows Server 2008 和 PowerShell 版本 2 上以管理员身份运行的。

Mat*_*att 5

作为PetSerAl指出-replace比较运营商支持正则表达式。虽然您可以在您的模式中使用某种程度的表达式,但您会增加不必要的复杂性,尤其是因为您无论如何都只是使用简单的匹配。

更简单的解决方案是使用字符串方法.Replace()

$filePath = "C:\Solutions.ps1"
(Get-Content $filePath).Replace($Source_IP,$Target_IP) | Set-Content $filePath
Run Code Online (Sandbox Code Playgroud)

请注意,.Replace()区分大小写。如果您只是替换 IP 地址,这是一个有争议的问题。我不确定您为什么会遇到第二个文件的问题。