Как прочитать первый столбец CSV-файла с помощью powershell

#powershell #csv

Вопрос:

Я пытаюсь прочитать CSV-файл с помощью powershell.

В настоящее время я делаю следующее:

 #Reading CSV
$stats = Import-Csv -Path $counterFile -Delimiter $separator
 

И теперь мне нужно извлечь значения столбцов в разных объектах.

Я видел, что я должен иметь доступ к нему вот так:

 $stats.ColumnHeader
 

Проблема в том, что этот столбец содержит даты, и один гений решил, что заголовком этого столбца будет часовой пояс компьютера в странном формате.

Итак, как я могу прочитать первый столбец, не «зная» текст заголовка и не изменяя заголовки других столбцов?

Есть ли способ получить доступ к этому столбцу через индексы?

Ответ №1:

У каждого PSCustomObject из них есть несколько скрытых свойств:

 $Stats |Get-Member -Force

Name        MemberType   Definition
----        ----------   ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]] pstypenames{get=PSTypeNames;}
psadapted   MemberSet    psadapted {ToString, GetType, Equals, GetHashCode}
psbase      MemberSet    psbase {ToString, GetType, Equals, GetHashCode}
psextended  MemberSet    psextended {Id, Name, Country, EMail, Age, ReportsTo}
psobject    MemberSet    psobject {BaseObject, Members, Properties, Methods, ImmediateBaseObject, TypeNames, get_BaseObject, get_Members, get_Properties, get_Methods, get_ImmediateBaseObject, get_TypeNames, ToString, Copy, CompareTo, Equals, GetHash…
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
...         NoteProperty ...
 

Где PSObject свойство содержит Properties свойство, содержащее дочерние свойства, а также Name и Value каждого $Stats свойства.
Другими словами, чтобы узнать имя первого $Stats[0] свойства (он же первый столбец), вы можете сделать:

 $Stats[0].PSObject.Properties.Name[0]
ColumnHeader
 

И получить все значения этого столбца:

 $ColumnName = $Stats[0].PSObject.Properties.Name[0]
$Stats.$ColumnName
 

Или:

 $Stats.($Stats[0].PSObject.Properties.Name[0])