Powershell 编辑ForEach对象循环中的文本文件内容
我正试图在刷新目录后从PowerHhell编辑一个文本文件 尝试从目标位置Powershell 编辑ForEach对象循环中的文本文件内容,powershell,loops,scripting,Powershell,Loops,Scripting,我正试图在刷新目录后从PowerHhell编辑一个文本文件 尝试从目标位置获取内容,我们正在搜索源dbconnecthost。 然后,我们希望替换为目标信息和设置内容。这些变量正在从另一个.ps1文件中提取 下面是我正在尝试使用的 function ReplaceDBhost { Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object { $_ -replace ('^dbconnecthost='
获取内容,我们正在搜索源dbconnecthost
。
然后,我们希望替换为目标信息和设置内容。这些变量正在从另一个.ps1
文件中提取
下面是我正在尝试使用的
function ReplaceDBhost {
Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object {
$_ -replace ('^dbconnecthost=' + '$SourceDBConnectHost'), ('dbconnecthost=' + '$TargetDBConnectHost' )
} | Set-Content ("$TargetLocation\Data\config.txt")
}
问题是,当我运行此程序时,没有得到任何更改。非常感谢您的帮助。当您使用单引号时,这称为字符串文字,不支持变量扩展。要纠正这一点,您需要使用双引号(如果变量是字符串,并且附加了+
),则完全不使用引号):
尽管您的正则表达式可以通过环顾来改进:
"(?<=^dbconnecthost=)$SourceDBConnectHost", $TargetDBConnectHost
”(?当您使用单引号时,称为字符串文字,不支持变量扩展。若要更正此问题,您需要使用双引号(如果您的变量是字符串,并且您正在添加+
),则根本不使用引号):
尽管您的正则表达式可以通过环顾来改进:
"(?<=^dbconnecthost=)$SourceDBConnectHost", $TargetDBConnectHost
”(?@LotPings good catch-或将-Raw
与多行正则表达式选项一起使用。@LotPings good catch-或将-Raw
与多行正则表达式选项一起使用。
$path = @{Path = "$TargetLocation\Data\config.txt"}
$pattern = "(?<=^dbconnecthost=)$SourceDBConnectHost"
(Get-Content @path) -replace $pattern, $TargetDBConnectHost | Set-Content @path