Powershell Automation脚本使用以下命令一次更新

时间:2018-05-29 14:58:00

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

我的脚本运行正常,并根据需要进行更改。只发出它确实是我的输入文件大小保持不变,输出文件保持加倍。我怎么能阻止它?输入是我的原始文件!!当我比较我可以看到变化,但我的输出ctg文件加倍!请帮忙

$data = @(
    @{
        pattern = "LACTION 'SQL\(''logility_prod_scp_logility'',"
        replacement = "LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    },
    @{
        pattern = "LACTION 'SQL\(''dwfei'',"
        replacement = "LACTION 'SQL(''DW_FEI'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    },    
    @{
        pattern = "LACTION 'SQL\(''DWFEI'',"
        replacement = "LACTION 'SQL(''DW_FEI'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    }

)

$data | 
    ForEach-Object  { 
        (Get-Content $_.inputFile) -replace $_.pattern, $_.replacement | Out-File $_.outputFile
    }

1 个答案:

答案 0 :(得分:0)

今天,您正在运行此过程以在源.ctg文件中交换一系列令牌。我建议将每个步骤移动到.CSV文件中的行中,如下所示:

#This
$pattern = "LACTION 'SQL\(''logility_prod_scp_logility'',"
$replacement = "LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"

我们会将这两个字符串移动到.CSV文件中的列中,如下所示。请注意,由于您的字段中有逗号很多,我建议使用分号代替:

Source;Target
"LACTION 'SQL\(''logility_prod_scp_logility'',";"LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"

我们可以像这样检索这些值:

$strings | convertfrom-csv -Delimiter ';'

集成

首先,您应该将所有令牌从这九个步骤手动移动到分号分隔值列表中。

其次,完成此操作后,您可以遍历.CSV中的每一行,只用六行替换所有令牌。

$string = Import-Csv -Delimiter ';' -Path c:\PathTo\YourFile.csv
ForEach($string in $strings){

   (Get-Content "C:\files\DW_FEI_DEV_input.ctg") -replace $string.Source,$string.Target |
      Out-File "C:\files\DW_FEI_DEV_output.ctg"

}