Powershell 编辑ForEach对象循环中的文本文件内容

Powershell 编辑ForEach对象循环中的文本文件内容,powershell,loops,scripting,Powershell,Loops,Scripting,我正试图在刷新目录后从PowerHhell编辑一个文本文件 尝试从目标位置获取内容,我们正在搜索源dbconnecthost。 然后,我们希望替换为目标信息和设置内容。这些变量正在从另一个.ps1文件中提取 下面是我正在尝试使用的 function ReplaceDBhost { Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object { $_ -replace ('^dbconnecthost='

我正试图在刷新目录后从PowerHhell编辑一个文本文件

尝试从目标位置
获取内容,我们正在搜索源
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