powershellcolumnsortingimport-csvadd-member

How to specify column position when adding new column to a csv file using PowerShell


How can I specify the column position when adding a new column to an existing csv file?

I want to add the new column as second column (Not at the end what the default is).
The first column is always the same, but the other columns can differ per file (so it is not known on beforehand which columns (names and order) there are (with the exception of the first column, which always contains the name)).

As far as I know there is no position parameter for Add-Member.

Sample code:

$csv = Import-Csv -Path "attendees.csv" -Delimiter ';' 

foreach ($row in $csv)
{
    $row | Add-Member -'GUID' -Value (New-Guid).Guid -MemberType NoteProperty 
}

$csv | Export-Csv new_attendees.csv' -NoTypeInformation

Solution

  • In case you do not know the column names at forehand.
    Using Select-Object with a calculated property for this:

    $csv = Import-Csv -Path "attendees.csv" -Delimiter ';' 
    $Properties = [Collections.Generic.List[Object]]$csv[0].psobject.properties.name
    $Properties.Insert(1, @{ n='Guid'; e={ New-Guid } }) # insert at column #1
    $csv |Select-Object -Property $Properties |Export-Csv new_attendees.csv' -NoTypeInformation
    

    Explanation: (Updated 2022-11-12)