Экспорт данных в столбец CSV - PullRequest
0 голосов
/ 16 октября 2018

У меня есть 2 массива - $ Hostnames и $ Ipaddresses.

Мой массив $ Hostname отображает список имен компьютеров компьютера, а мой массив $ Ipaddresses отображает список ipaddresses, который соответствует массиву $ Hostnames.

У меня есть существующий файл CSV с 2 заголовками - «Имя хоста» и «Ipaddress»

Я бы хотел, чтобы 2 массива были экспортированы в мой файл CSV с 2 столбцами.Один столбец с именами хостов, а другой - с Ipaddresses.

На этом сайте и на других сайтах, которые я посетил, есть несколько ответов на похожие вопросы, но ни один из них мне пока не помог.

Это самое близкое, что я получил ...

$CSV = Import-Csv -path C:\temp\scripts\ReimageCheck\results.csv

foreach ($column in $CSV) {

generate column 1 value.

    $column."Hostname" = $Hostnames

generate column 2 value.

    $column."Ipaddress" = $Ipaddresses

} 

$CSV | Export-Csv -Path C:\temp\scripts\ReimageCheck\Results2.csv

Но когда я открываю "Results2.csv", вся информация представляет собой набор искаженных символов, разбросанных по всемуместо.Любая помощь будет принята с благодарностью.Еще лучше, если мы сможем устранить необходимость в уже существующем CSV-файле и просто создать новый CSV-файл с двумя столбцами информации.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вышеупомянутое будет очень неэффективно для больших файлов CSV, так как массив $ data воссоздается для каждой итерации цикла.

Более эффективное решение будет

$hostnames = @('h1','h2','h3')
$ipaddresses = @('1.1.1.1','2.2.2.2','3.3.3.3')

$data = for ($i = 0; $i -lt $hostnames.Count; $i++)
{
    [pscustomobject]@{'HostName'=$hostnames[$i]; 'IpAddress'=$ipaddresses[$i]}
}

# test
$data | ConvertTo-Csv -NoTypeInformation

#
#$data | Export-Csv -Path 'C:\temp\scripts\ReimageCheck\Results2.csv'
0 голосов
/ 16 октября 2018

Предполагая, что ваши два массива на самом деле имеют одинаковый размер ...

Вы можете перебрать их в цикле for и добавить новый pscustomobject в массив, а затем сохранить его как CSV.

$data = @()
$hostnames = @('h1','h2','h3')
$ipaddresses = @('1.1.1.1','2.2.2.2','3.3.3.3')

for ($i = 0; $i -lt $hostnames.Count; $i++)
{
    $data += [pscustomobject]@{'HostName'=$hostnames[$i]; 'IpAddress'=$ipaddresses[$i]}
}

# test
$data | ConvertTo-Csv -NoTypeInformation

#
#$data | Export-Csv -Path 'C:\temp\scripts\ReimageCheck\Results2.csv'

Есть несколько способов улучшить этот алгоритм для скорости и т. Д., Но это показывает вещи самым простым способом.Используйте ISE или VSCode для отладки и понимания кода, пройдя по нему.Также используйте Get-Help для поиска других новых для вас вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...