Getting “System.Collections.Generic.List`1[System.String]” in CSV File export when data is okay on screen

前端 未结 2 2014
梦如初夏
梦如初夏 2020-12-02 01:03

I am new to PowerShell and trying to get a list of VM names and their associated IP Addresses from within Hyper-V.

I am getting the information fine on the screen bu

相关标签:
2条回答
  • 2020-12-02 01:41

    OtherObjectPipedStuff | Select-object name,IPV4Addresses | export-csv PP.csv -NoTypeinformation

    0 讨论(0)
  • 2020-12-02 01:47

    If an object you export as CSV with Export-Csv or ConvertTo-Csv has property values that contain a collection (array) of values, these values are stringified via their .ToString() method, which results in an unhelpful representation, as in the case of your array-valued .IPV4Addresses property.

    To demonstrate this with the ConvertTo-Csv cmdlet (which works analogously to Export-Csv, but returns the CSV data instead of saving it to a file):

    PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
    "col1","col2"
    "1","System.Object[]"
    

    That is, the array 2, 3 stored in the .col2 property was unhelpfully stringified as System.Object[], which is what you get when you call .ToString() on a regular PowerShell array; other .NET collection types - such as [System.Collections.Generic.List[string]] in your case - stringify analogously; that is, by their type name.


    Assuming you want to represent all values of an array-valued property in a single CSV column, to fix this problem you must decide on a meaningful string representation for the collection as a whole and implement it using Select-Object with a calculated property:

    E.g., you can use the -join operator to create a space-separated list of the elements:

    PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | 
          Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
            ConvertTo-Csv
    "col1","col2"
    "1","2 3"
    

    Note how array 2, 3 was turned into string '2 3'.

    0 讨论(0)
提交回复
热议问题