Как я могу создать CSV-файл и добавить в него содержимое в powershell?

#powershell #csv

Вопрос:

Мне нужно сохранить некоторую информацию о серверах в csv-файл. Информация, которая будет сохранена в этом файле, будет добавлена как цикл, поэтому, в некотором смысле, мне нужно добавить информацию в файл.

Я попробовал два способа сделать это, но ни один из них, похоже, не работает (переменные ip, id, имя и stauts не будут статичными в окончательной версии скрипта).:

  1. с добавлением контента
     for($i=0; $i -lt 5; $i  ){
     $OutFile = "C:information.csv"
    
     $test = Test-Path -Path $Outfile
    
     $id=$i
     $ip="1234$i"
     $name="Server$i"
     $status="up"
    
     if(!$test)
    {
    
        Add-Content -Path $Outfile -Value '"ID","IP","Name","Status"'
    
    }
     

    Добавить-Содержимое -Путь $OutFile -Значение $id,$ip,$имя,$статус

    }

Когда я запускаю этот скрипт, вся информация помещается в один и тот же столбец/заголовок.

введите описание изображения здесь

  1. Создание пустого CSV-файла и добавление в него содержимого:
     for($i=0; $i -lt 5; $i  ){
    $OutFile = "C:information.csv"
    
    $test = Test-Path -Path $Outfile
    
    $id=$i
    $ip="1234$i"
    $name="Server$i"
    $status="up"
    
    if(!$test)
     {
        $newcsv = {} | Select "ID", "NAME","IP","STATUS" | Export-Csv $OutFile
     }
    
    
    $csvfile = Import-Csv $OutFile
    
    $csvfile.ID = $id
    $csvfile.NAME = $ip    
    $csvfile.IP = $name
    $csvfile.STATUS = $status
    
    
    $csvfile | Export-CSV $outfile –Append
    
    
    }
     

Когда я запускаю этот сценарий, я получаю сообщения об ошибках для каждого заголовка, в которых говорится:

Свойство «ИДЕНТИФИКАТОР» не может быть найдено на этом объекте. Убедитесь, что свойство существует и может быть установлено.

Однако файл создается, и информация помещается в правильный заголовок, но содержимое каждого заголовка неверно, а заголовок идентификатора имеет значение, отличное от значения переменной, которую я создал

введите описание изображения здесь

Я использую лучшие костюмы для добавления значений в csv-файл, и что я делаю не так, чтобы выходные данные отображались на картинках?

Я готов ответить на любой вопрос, касающийся этой проблемы. Спасибо, что уделили мне время.

Комментарии:

1. Вам не нужно тестировать ( Test-Path ), создавать и/или загружать свой Csv файл ( Import-Csv ). Export-CSV $outfile –Append Достаточно просто создать CSV-файл и добавить в него содержимое в powershell

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

3. Export-CSV $outfile –Append создаст файл (и немедленно добавит содержимое), если он не существует, и добавит содержимое, если оно существует.


Ответ №1:

Для вывода допустимого CSV-файла собирайте объекты и используйте Export-Csv .

Попробуйте что-нибудь вроде этого:

 $OutFile = "C:information.csv"

# output 5 dummy servers
0..4 | ForEach-Object {
    [PsCustomObject]@{
        Id     = $_
        IP     = "192.168.1.$_"
        Name   = "Server$_"
        Status = 'Up'
    }
} | Export-Csv -Path $Outfile -NoTypeInformation 
 

Вывод при отображении на экране:

 Id IP          Name    Status
-- --          ----    ------
 0 192.168.1.0 Server0 Up    
 1 192.168.1.1 Server1 Up    
 2 192.168.1.2 Server2 Up    
 3 192.168.1.3 Server3 Up    
 4 192.168.1.4 Server4 Up
 

Комментарии:

1. Спасибо вам за ваш ответ. Есть ли способ сделать это без указания количества циклов. Я просто добавил цикл for, чтобы люди поняли, что сценарий будет выполняться несколько раз, и каждый раз он будет добавлять информацию. Однако в окончательной версии сценария не будет цикла for

2. @Sam Вы пробовали просто удалить петлю? [pscustomobject]@{ Id = 1; IP = "192.168.1.1"; Name='Server1'; Status='Up'} |Export-Csv -Path C:pathtoinformation.csv -NoTypeInformation

3. Спасибо, это сработало! Именно то, что я искал. Оказывается, это очень простой сценарий. Еще раз спасибо вам за потраченное время