PowerShell / PowerShell/PowerShell

`Export-Csv`/`ConvertTo-Csv` to better stringify complex properties

Đang mở
#20,383 6 bình luận 2 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Issue-Enhancement Needs-Triage
Ngôn ngữ chính
C#
Star
55.5k
Fork
8.5k
Merge trung bình
1 ngày 2 giờ
Pull request đã merge (30 ngày)
88

Mô tả

Summary of the new feature / enhancement

Although questionable, trying to put a structured object into a flat csv file, is a quite common question at stackoverflow (see e.g.: Getting System.Object[] issue for JSON Array data in output in PowerShell Script). This is often based on a misconception of the concerned structures, stingifying it to just the type name (as e.g. System.Object[]) is quiet pointless, instead I would expect the complex properties to have a similar value as the display format of Format-Table:

$List = [PSCustomObject]@{
  int = 1
  string = 'One'
  Array = 1, 2
  HashTable = @{ '1' = 'One'; '2' = 'Two' } # Using string keys, see: #5749
  Object = [PSCustomObject]@{ 1 = 'One'; 2 = 'Two' }
},
[PSCustomObject]@{
  int = 2
  string = 'Two'
  Array = 3, 4
  HashTable = @{ '3' = 'Three'; '4' = 'Four' }
  Object = [PSCustomObject]@{ 3 = 'Three'; 4 = 'Four' }
}

(2023-10-01: Changed hashtable to string keys for reason explained at: #5749)

Format-Table output
$List | Format-Table

int string Array  HashTable               Object
--- ------ -----  ---------               ------
  1 One    {1, 2} {[2, Two], [1, One]}    @{1=One; 2=Two}
  2 Two    {3, 4} {[4, Four], [3, Three]} @{3=Three; 4=Four}
Current ConvertTo-Csv output
$List | ConvertTo-Csv
"int","string","Array","HashTable","Object"
"1","One","System.Object[]","System.Collections.Hashtable","@{1=One; 2=Two}"
"2","Two","System.Object[]","System.Collections.Hashtable","@{3=Three; 4=Four}"
Expected ConvertTo-Csv output (wishful thinking)
$List | ConvertTo-Csv
"int","string","Array","HashTable","Object"
"1","One","{1, 2}","{[2, Two], [1, One]}","@{1=One; 2=Two}"
"2","Two","{3, 4}","{[4, Four], [3, Three]}","@{3=Three; 4=Four}"

Apart from the fact that is makes more sense, it might also help to troubleshoot and understand the situation.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng cách xác định các entry point của Export-Csv và ConvertTo-Csv cùng các bài kiểm thử hiện có của chúng, sau đó so sánh cách chuyển đổi thuộc tính phức tạp thành chuỗi hiện tại với các ví dụ Format-Table trong issue. Xác định và kiểm thử các cách biểu diễn dự kiến cho mảng, bảng băm và đối tượng lồng nhau, đồng thời giữ nguyên đầu ra vô hướng hiện có; công việc được xem là hoàn tất khi các ví dụ CSV dự kiến được các bài kiểm thử bao phủ.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
csharp, powershell
Lĩnh vực
cli
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.