Обработка нескольких CSV-файлов и сохранение данных в отдельных текстовых файлах (без пробелов и новых строк) с помощью Powershell - PullRequest
0 голосов
/ 22 марта 2019

Я изо всех сил пытаюсь заставить этот сценарий работать.

Я пытаюсь обработать все CSV-файлы (по одному) с помощью powershell и сохранить каждый CSV-файл в виде отдельного текстового файла.

В текстовом файле я надеюсь, что все IP-адреса в одной строке разделены запятой (например, 192.168.73.44,192.168.75.224,192.168.76.45,192.168.77.105,192.168.77.237,192.168.78.33 , 192.168.78.92)

Таким образом, этот скрипт должен извлечь значение каждого столбца ipv4address из определенного файла CSV и добавить запятую "," после каждого IP-адреса и добавить все IP-адреса из этого конкретного CSV в текстовый файл.

Мой скрипт обрабатывает CSV-файлы и генерирует текстовые файлы, но записывает только первый IP-адрес, найденный в CSV-файле, в текстовый файл.

Не могли бы вы помочь мне здесь?

Get-ChildItem C:\Temp\Qualys\All\AssetGroups\*.csv | Foreach-Object {

  $basename = $_.Name

  $detail = import-csv $_ 

 foreach ($csv in $detail) { 

 $Outputs =@()
 $field = $csv.ipv4address

 $field = $field + ","
 $Outputs +=$field 

 } 

$Outputs | Out-File "C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt"

$regexA = "(\s,)"

$regexB = "\s" 

(Get-Content C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt | Out-String) -replace $regexA,' ' -replace "`r?`n(?!`r?`n)"  -join ' ' -replace $regexB, ''|

Set-Content C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt

$b = Get-Content -Path C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt
@(ForEach ($a in $b) {$a.Replace(' ', '')}) > C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt
}

IPs.csv

1 Ответ

0 голосов
/ 22 марта 2019

Посмотрев на ваш CSV, я подумал, что будет проще переписать.Намного легче следовать, чем то, что вы делали.

$skips = $null, '', ' '
Get-ChildItem C:\Temp\Qualys\All\AssetGroups\*.csv| ForEach-Object {
    $csv = import-csv $_.FullName
    $IPArray = @()
    Foreach($ip in $csv) {
        if(!($ip.ipv4address -in $skips)) {
            $IPArray += $ip.ipv4address
        }
    }
    $IPArray -join ','| Out-File C:\Temp\Qualys\All\AssetGroups\Textfiles\$($_.BaseName).txt
}
...