Bird
Raised Fist0
PowerShellscripting~5 mins

CSV operations (Import-Csv, Export-Csv) in PowerShell

Choose your learning style10 modes available
Introduction

CSV files store data in a simple table format. Import-Csv and Export-Csv help you read and write these files easily in PowerShell.

You want to read a list of users from a CSV file to process them in a script.
You need to save script results like system info into a CSV file for reports.
You want to convert data from a CSV file into PowerShell objects to filter or sort.
You need to export data from PowerShell into a CSV file to share with others.
You want to automate importing and exporting data between applications using CSV.
Syntax
PowerShell
Import-Csv -Path <filepath>
Export-Csv -Path <filepath> [-NoTypeInformation]

Import-Csv reads a CSV file and creates objects with properties from the columns.

Export-Csv converts objects into CSV format and saves to a file. Use -NoTypeInformation to skip extra type info line.

Examples
Reads the file users.csv and creates objects for each row.
PowerShell
Import-Csv -Path "users.csv"
Saves the objects in $data to output.csv without extra type info.
PowerShell
$data | Export-Csv -Path "output.csv" -NoTypeInformation
Reads data.csv and filters rows where Age is greater than 30.
PowerShell
Import-Csv -Path "data.csv" | Where-Object { [int]$_.Age -gt 30 }
Sample Program

This script reads a CSV file with user data, filters users older than 25, saves the filtered list to a new CSV file, and prints their details.

PowerShell
## Sample CSV content saved as users.csv:
# Name,Age,City
# Alice,28,New York
# Bob,35,Chicago
# Carol,22,Seattle

# Import CSV file
$users = Import-Csv -Path "users.csv"

# Filter users older than 25
$olderUsers = $users | Where-Object { [int]$_.Age -gt 25 }

# Export filtered users to new CSV
$olderUsers | Export-Csv -Path "older_users.csv" -NoTypeInformation

# Display filtered users
$olderUsers | ForEach-Object { "Name: $($_.Name), Age: $($_.Age), City: $($_.City)" }
OutputSuccess
Important Notes

CSV files must have a header row with column names for Import-Csv to work properly.

Export-Csv adds a type information line by default; use -NoTypeInformation to avoid this.

Imported CSV data is treated as strings; convert types if needed (e.g., [int]$_.Age).

Summary

Use Import-Csv to read CSV files into objects you can work with in PowerShell.

Use Export-Csv to save objects back into CSV files for sharing or reports.

Filtering and processing CSV data is easy by combining these commands with PowerShell pipelines.

Practice

(1/5)
1. What does the PowerShell cmdlet Import-Csv do?
easy
A. Reads a CSV file and converts each row into an object
B. Saves objects into a CSV file
C. Deletes a CSV file from disk
D. Converts objects into JSON format

Solution

  1. Step 1: Understand the purpose of Import-Csv

    Import-Csv reads data from a CSV file and creates objects where each row is an object with properties matching the CSV headers.
  2. Step 2: Compare with other options

    Export-Csv saves objects to CSV, deletion and JSON conversion are unrelated to Import-Csv.
  3. Final Answer:

    Reads a CSV file and converts each row into an object -> Option A
  4. Quick Check:

    Import-Csv = Reads CSV to objects [OK]
Hint: Import-Csv reads CSV; Export-Csv writes CSV [OK]
Common Mistakes:
  • Confusing Import-Csv with Export-Csv
  • Thinking Import-Csv deletes files
  • Assuming Import-Csv converts to JSON
2. Which of the following is the correct syntax to export objects to a CSV file named data.csv?
easy
A. Export-Csv -Path data.csv -InputObject $objects
B. Import-Csv -Path data.csv -InputObject $objects
C. Export-Csv $objects data.csv
D. Export-Csv -File data.csv -Objects $objects

Solution

  1. Step 1: Identify correct Export-Csv syntax

    The correct syntax uses -Path to specify the file and -InputObject for the objects to export.
  2. Step 2: Eliminate incorrect options

    Import-Csv is for reading, not exporting. Options A and D use wrong parameter names or order.
  3. Final Answer:

    Export-Csv -Path data.csv -InputObject $objects -> Option A
  4. Quick Check:

    Export-Csv uses -Path and -InputObject [OK]
Hint: Use -Path for file and -InputObject for data in Export-Csv [OK]
Common Mistakes:
  • Using Import-Csv instead of Export-Csv
  • Wrong parameter names like -File or -Objects
  • Omitting parameter names and relying on position
3. Given the CSV file users.csv with content:
Name,Age
Alice,30
Bob,25

What will the following PowerShell command output?
Import-Csv users.csv | Where-Object { $_.Age -gt 27 } | Select-Object -ExpandProperty Name
medium
A. No output
B. Bob
C. Alice`nBob
D. Alice

Solution

  1. Step 1: Import and filter CSV data

    The command imports the CSV, then filters rows where Age > 27. Alice's age is 30, Bob's is 25, so only Alice passes.
  2. Step 2: Select and output the Name property

    Select-Object -ExpandProperty Name outputs the Name value directly, so output is 'Alice'.
  3. Final Answer:

    Alice -> Option D
  4. Quick Check:

    Filter Age > 27 = Alice [OK]
Hint: Filter with Where-Object, then expand property for direct output [OK]
Common Mistakes:
  • Confusing string output with array output
  • Using -ExpandProperty incorrectly
  • Assuming both names print without filtering
4. You run this command to export data:
$data | Export-Csv -Path output.csv

But the CSV file contains extra quotes around each field. How can you fix this?
medium
A. Use Import-Csv instead of Export-Csv
B. Add the parameter -NoQuotes to Export-Csv
C. Add the parameter -NoTypeInformation to Export-Csv
D. Use Export-Csv -Raw to avoid quotes

Solution

  1. Step 1: Understand default Export-Csv behavior

    By default, Export-Csv adds type information as the first line and quotes fields. The extra quotes are normal but can be controlled.
  2. Step 2: Use -NoTypeInformation to remove type info and reduce quotes

    Adding -NoTypeInformation removes the type info line and often reduces unnecessary quotes.
  3. Final Answer:

    Add the parameter -NoTypeInformation to Export-Csv -> Option C
  4. Quick Check:

    -NoTypeInformation removes extra info and quotes [OK]
Hint: Use -NoTypeInformation to clean Export-Csv output [OK]
Common Mistakes:
  • Trying to use non-existent -NoQuotes parameter
  • Confusing Import-Csv with Export-Csv
  • Using -Raw which is invalid for Export-Csv
5. You have a CSV file products.csv with columns Id,Name,Price. You want to increase the price by 10% and save the updated data back to products.csv. Which script correctly does this?
hard
A. Import-Csv products.csv | ForEach-Object { $_.Price = $_.Price + 10 } | Export-Csv products.csv
B. $products = Import-Csv products.csv; $products | ForEach-Object { $_.Price = [math]::Round($_.Price * 1.1, 2) }; $products | Export-Csv -Path products.csv -NoTypeInformation
C. $products = Import-Csv products.csv; foreach ($p in $products) { $p.Price = $p.Price * 1.1 }; Export-Csv $products products.csv
D. Import-Csv products.csv | ForEach-Object { $_.Price = $_.Price * 1.1 } > products.csv

Solution

  1. Step 1: Import CSV and update prices correctly

    $products = Import-Csv products.csv; $products | ForEach-Object { $_.Price = [math]::Round($_.Price * 1.1, 2) }; $products | Export-Csv -Path products.csv -NoTypeInformation imports CSV into $products, then uses ForEach-Object to update each Price by multiplying by 1.1 and rounding to 2 decimals.
  2. Step 2: Export updated objects back to CSV with -NoTypeInformation

    $products = Import-Csv products.csv; $products | ForEach-Object { $_.Price = [math]::Round($_.Price * 1.1, 2) }; $products | Export-Csv -Path products.csv -NoTypeInformation exports $products back to the same file with -NoTypeInformation to avoid extra lines.
  3. Step 3: Identify errors in other options

    Import-Csv products.csv | ForEach-Object { $_.Price = $_.Price + 10 } | Export-Csv products.csv adds 10 instead of 10%, $products = Import-Csv products.csv; foreach ($p in $products) { $p.Price = $p.Price * 1.1 }; Export-Csv $products products.csv has wrong Export-Csv syntax, Import-Csv products.csv | ForEach-Object { $_.Price = $_.Price * 1.1 } > products.csv redirects output incorrectly.
  4. Final Answer:

    $products = Import-Csv products.csv; $products | ForEach-Object { $_.Price = [math]::Round($_.Price * 1.1, 2) }; $products | Export-Csv -Path products.csv -NoTypeInformation -> Option B
  5. Quick Check:

    Import, update with ForEach-Object, Export with -NoTypeInformation [OK]
Hint: Use Import-Csv, update in ForEach-Object, then Export-Csv -NoTypeInformation [OK]
Common Mistakes:
  • Adding fixed amount instead of percentage
  • Wrong Export-Csv parameter order or syntax
  • Redirecting output instead of using Export-Csv
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard