Search code examples
windowspowershellcsvimportpowershell-3.0

Powershell Strange behaviour with Import-CSV


I have following powershell code:

clear;
$importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;

Write-Host $importedIDs.Length;

for ($i=0; $i -lt $importedIDs.Length; $i++) {
  Write-Host $($importedIDs[$i]);
}

The goal is to read only the id column in the csv file which looks like this:

"created";"id"
"2018-04-04 21:03:01";"123456"
"2018-04-04 21:03:01";"123457"

When there are two or more rows the output is as expected:

2
123456
123457

However when there is only 1 row in the csv file (row with id 123456) the output is:

6
1
2
3
4
5
6

Desired output would be:

1
123456

Can anyone explain why this is happening and how can I fix this? Any help is appreciated


Solution

  • If there are multiple rows in the csv you get an array of strings. One array-element per row. Therefore the index applies to the rows. If there is only one row you don't get a array containing one string, as you would probably expect. You get a single string instead. When using an index on a string powershell treats the string as an array of characters and therefore returns only one char.