我正在尝试在刷新目录后从PowerHhell编辑文本文件。
尝试从目标位置Get-Content
来源dbconnecthost
是我们正在寻找的。然后我们想要替换目标信息和Set-Content
。这些变量是从另一个.ps1
文件中提取的。
以下是我试图使用的内容。
function ReplaceDBhost {
Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object {
$_ -replace ('^dbconnecthost=' + '$SourceDBConnectHost'), ('dbconnecthost=' + '$TargetDBConnectHost' )
} | Set-Content ("$TargetLocation\Data\config.txt")
}
问题是,当我运行它时,我没有得到任何改变。任何帮助是极大的赞赏。
当您使用单引号时,它被称为字符串文字并且不支持变量扩展。要纠正这个问题,你需要使用双引号(如果你的变量是一个字符串并且你附加+
,则根本没有引号):
(Get-Content -Path "$TargetLocation\Data\config.txt") |
ForEach-Object {
$_ -replace "^dbconnecthost=$SourceDBConnectHost", "dbconnecthost=$TargetDBConnectHost"
} |
Set-Content -Path "$TargetLocation\Data\config.txt"
虽然可以使用环视改进您的正则表达式:
"(?<=^dbconnecthost=)$SourceDBConnectHost", $TargetDBConnectHost
缩短:
$path = @{Path = "$TargetLocation\Data\config.txt"}
$pattern = "(?<=^dbconnecthost=)$SourceDBConnectHost"
(Get-Content @path) -replace $pattern, $TargetDBConnectHost | Set-Content @path