Сценарий Powershell Automation с использованием приведенных ниже команд, который обновляется одним выстрелом - PullRequest
0 голосов
/ 29 мая 2018

Мой скрипт работает нормально и вносит изменения по мере необходимости.Единственная проблема - размер моего входного файла остается прежним, а выходной файл увеличивается вдвоеКак я могу это остановить?Ввод мой оригинальный файл!когда я сравниваю, я вижу изменения, но мои выходные файлы 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 голосов
/ 29 мая 2018

Сегодня вы запускаете этот процесс, чтобы обменять серию токенов в исходном файле .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"

}
...