The Import-Csv cmdlet provides a way for you to read in data from a comma-separated values file (CSV) and then display that data in tabular format within the Windows PowerShell console. For example, suppose you have a file named C:\Scripts\Test.txt, a file that contains the following data:
1 2 3 4 |
Name,Department,Title Paula Marín,Research,Manager Juan Hana,Finance,Finance Specialist Carlos Abel,Finance,Accountant |
You say you’d like to view that data on-screen, and in a table, to boot? Then just call Import-Csv followed by the path to the file you want to open:
1 |
Import-Csv c:\scripts\test.txt |
In turn, Windows PowerShell will give you output that looks like this:
1 2 3 4 5 |
Name Department Title ---- ---------- ----- Paula Marín Research Manager Juan Hana Finance Finance Specialist Carlos Abel Finance Accountant |
That’s cool. But if you really want to have some fun – well, good point: if you really want to have some fun you’d probably do something other than import CSV files. Let’s put it this way: if you want to have some relative fun, pipe the imported data to the Where-Object cmdlet. For example, this command retrieves only those employees who work for the Finance department:
1 |
Import-Csv c:\scripts\test.txt | Where-Object {$_.department -eq "Finance"} |
Here’s what the resulting dataset looks like:
1 2 3 4 |
Name Department Title ---- ---------- ----- Juan Hana Finance Finance Specialist Carlos Abel Finance Accountant |
Granted, the right side of the pipeline is bit cryptic looking. However, it’s not all that hard to interpret. The $_ is simply Windows PowerShell notation for the current object; the current object, of course, is the text file C:\Scripts\Test.txt. The .department is standard «dot» notation; this is no different than referring to a WMI property by saying something like objItem.Name. All we’re saying is that, for the text file in question, we want to check the value of the Department property (i.e., the Department field). If the field is equal to (-eq) Finance we want to see it; if it’s not equal to Finance then we don’t want to see it.
Suppose we wanted to see the records for all employees except those from the Finance Department. In that case we’d use this command, with -ne meaning «not equal to»:
1 |
Import-Csv c:\scripts\test.txt | Where-Object {$_.department -ne "Finance"} |
That command returns the following data:
1 2 3 |
Name Department Title ---- ---------- ----- Paula Marín Research Manager |
Can you have more than one item in a where clause? Sure: just combine the two criteria with -and or -or. For example, this command returns only accountants who work in the Finance department:
1 |
Import-Csv c:\scripts\test.txt | Where-Object {$_.department -eq "Finance" -and $_.title -eq "Accountant"} |
What does that mean? That means you’ll get back information like this:
1 2 3 |
Name Department Title ---- ---------- ----- Carlos Abel Finance Accountant |
Meanwhile, this command returns a list of employees who either work in the Research department or are accountants:
1 |
Import-Csv c:\scripts\test.txt | Where-Object {$_.department -eq "Research" -or $_.title -eq "Accountant"} |
You can probably guess what information we get back when we run that command:
1 2 3 4 |
Name Department Title ---- ---------- ----- Paula Marín Research Manager Carlos Abel Finance Accountant |