#powershell #csv
Вопрос:
Мне нужно сохранить некоторую информацию о серверах в csv-файл. Информация, которая будет сохранена в этом файле, будет добавлена как цикл, поэтому, в некотором смысле, мне нужно добавить информацию в файл.
Я попробовал два способа сделать это, но ни один из них, похоже, не работает (переменные ip, id, имя и stauts не будут статичными в окончательной версии скрипта).:
- с добавлением контента
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,$имя,$статус
}
Когда я запускаю этот скрипт, вся информация помещается в один и тот же столбец/заголовок.
- Создание пустого 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-файл и добавить в него содержимое в powershell2. Мне нужен тестовый путь только для того, чтобы проверить, существует ли этот путь. Если он существует, он будет только добавлять информацию, а не создавать файл с нуля
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. Спасибо, это сработало! Именно то, что я искал. Оказывается, это очень простой сценарий. Еще раз спасибо вам за потраченное время