PowerShell导入CSV和替换-操作顺序

PowerShell导入CSV和替换-操作顺序,powershell,Powershell,我有一个非常简单的替换函数。它遍历IP地址列表并替换前3个八位字节。似乎它们必须按特定的顺序排列,为什么 工作: $testips = Import-CSV Test.csv function change_PROD_IP { $PROD_oldIP = $line.NodeIP $PROD_newIP = $line.NodeIP -replace "10.245.0.","10.165.221." ` -replace "10.245.14.","10.1

我有一个非常简单的替换函数。它遍历IP地址列表并替换前3个八位字节。似乎它们必须按特定的顺序排列,为什么

工作:

$testips = Import-CSV Test.csv

function change_PROD_IP

{
    $PROD_oldIP = $line.NodeIP
    $PROD_newIP = $line.NodeIP -replace "10.245.0.","10.165.221." `
        -replace "10.245.14.","10.165.233." `
        -replace "10.245.15.","10.165.234." `
        -replace "10.245.12.","10.165.236." `
        -replace "10.245.13.","10.165.237." `
        -replace "10.245.1.","10.165.222." `

    Add-Content -Path Production_Nodes_Test.csv -Value "$PROD_Oldip, $PROD_newIP"
}

foreach ($line in $testips) {change_PROD_ip}
但如果我把最后一行放在第一位:

-replace "10.245.1.","10.165.222." `

然后它开始使用此行替换
10.245.12/13/14
,即任何第三个八位组以1开头的内容。为什么会出现这种情况,因为它是一个在1后面带有“.”的显式定义?

我想您不知道
-replace
使用正则表达式替换内容,并且
匹配任何字符。因此,您必须使用反斜杠转义圆点:
\。
或者使用替换方法intead:

$line.NodeIP.Replace("10.245.0.","10.165.221.").Replace(.....

我想您没有注意到这样一个事实,
-replace
使用正则表达式替换内容,
匹配任何字符。因此,您必须使用反斜杠转义圆点:
\。
或者使用替换方法intead:

$line.NodeIP.Replace("10.245.0.","10.165.221.").Replace(.....

虽然它还不是一个长长的列表,但是考虑构建一个具有映射的数据结构并使用它来进行操作。这也可以让您随意替换。虽然它不是一个长的列表,但是考虑建立一个具有映射的数据结构,并使用一个外观来处理它。这可能还允许您进行任意替换。