Matt.Engel_TMTI
Matt.Engel_TMTI

Reputation: 73

Simple PowerShell Script to loop through 1 CSV file to create a new CSV file from another

I know the title sounds confusing, but once I describe this, I'm certain there is a very easy way to perform what I need to do. I'm very new to PowerShell and am trying to perform a specific task that seems rather difficult to find a good answer for one the Web.

I have spent the past several days searching through methods of concatenating the data and joining the files together, but nothing that was specific enough to this task. All examples show how to display data, but nothing that loops through and adds data together to create a new csv file. If anything, I've over-researched this issue to the point of having to pose this message to see where I can get my brain de-cluttered with all of the useless options I've already tried...

I have two csv files. I call them csv's, but they are really just a single column of information each.

Files:

Users.csv

Offices.csv

The Users.csv file has a list of network user names. The Offices.csv file has a list of numbers that correspond to office locations.

What I want to have happen is to use a loop that will take each user from the users.csv file and create a new line in a separate csv file the adds each of the offices to it.

EXAMPLE:

Users.csv

NTNAME
domain\user1
domain\user2
domain\user3

Offices.csv

OFFICES
0001
0023
0043
0067

When combined, I would like csv file that looks like this:

NTNAME,OFFICES
domain\user1,0001
domain\user1,0023
domain\user1,0043
domain\user1,0067
domain\user2,0001
domain\user2,0023
domain\user2,0043
domain\user2,0067
domain\user3,0001
domain\user3,0023
domain\user3,0043
domain\user3,0067

Any help you can give would be greatly appreciated...

Upvotes: 2

Views: 4551

Answers (1)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200203

Borrowing Shay's awesome CSV field enumeration code:

$offices = Import-Csv 'C:\path\to\offices.csv'

Import-Csv 'C:\path\to\users.csv' | % {
  foreach ($prop in $_.PSObject.Properties) {
    $offices | select @{n=$prop.Name;e={$prop.Value}}, OFFICES
  }
} | Export-Csv 'C:\path\to\combined.csv' -NoTypeInformation

Upvotes: 1

Related Questions