разделить объединенные строки в CSV-файле с помощью PowerShell - PullRequest
0 голосов
/ 03 мая 2020

Я экспортировал в файл csv с помощью команды powershell. Я получил вывод, как показано ниже

Location   IP                     Name
 east      System.Object[]        System.Object[]
 wast      System.Object[]        System.Object[]

Чтобы удалить System.Object, я использовал -join ',' для IP и имени в моих скриптах powershell. Затем я получил выходные данные со слитыми строками, как показано ниже

Location   IP                     Name
   east      1,2,3,4,5            a,b,c,d,e,f
   west      6,7,8,9,             x,y,z,q

Ниже приведен мой сценарий. Пожалуйста, предложите любые изменения, чтобы не получать объединенные строки.

$report= @()
   $list = "first", "second", "third"
   Foreach($i in $list)
   location = $i.location
   IP =($i.IP -join ',')
   Name= ($i.Name -join ',')
   $report | Format-table Location,IP,Name
   $report |Export-Csv sample.csv

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Вам действительно нужно показать нам, как этот ввод действительно выглядит (откуда он взялся), поскольку System.Object [] является коллекцией и должен быть расширен для использования. Дезинфицировать конечно. Не используйте Format- * в этом коде, который не нужен для вашей конечной цели. Тип файла CSV является таблицей по своему дизайну, поэтому принудительное использование таблицы является избыточным и действительно необходимо, только если вы выводите экран. Вместо этого используйте PSCustomObject / Hashtable.

Например:

'D:\Temp\LocationRaw.csv' | 
 ForEach{
 $ReportObject = [PSCustomObject]@{
        Location = $PSItem.location
        IP       = $PSItem.IP
        Name     = $PSItem.Name
    }  | Export-Csv 'D:\Temp\LocationFinal.csv' -Append
 }

Конечно, я делаю здесь предположения, так как не знаю, как на самом деле выглядят эти данные как, значит, как эти коллекции отображаются. Если они собирают, то мы потенциально говорим ...

($PSItem).location

или

$PSItem | Select-Object -ExpandProperty location

... затем работаем с этими затраченными данными.

0 голосов
/ 03 мая 2020

Вот простое применение ... Учитывая, что $list - это объект, содержащий свойства Location, IP и Name с данными в нем.

$report= @()
$list = "first", "second", "third"

foreach($i in $list) 
{
    $row = "" | Select location,IP,Name
    $row.location = $i.location
    $row.IP =($i.IP -join ',')
    $row.Name= ($i.Name -join ',')
    $report += $row
}

$report | Export-Csv sample.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...