Пользовательские объекты Powershell: как получить доступ к свойству NoteProperty собранного результата

#powershell #custom-object #pscustomobject

#powershell #пользовательский объект #pscustomobject

Вопрос:

Чтение статьи о пользовательских объектах:

http://technet.microsoft.com/en-us/library/ff730946.aspx

Интересно, почему я получаю результат для отдельной записи: например $objAverage.Name

пока с помощью $colAverages.Имя nothing перезаписывается. Хотя с помощью Get-Member оба показывают [System.Объект] Имя свойства NoteProperty

Я ожидал бы возврата всех имен моего результирующего набора в $ colAverages.

Код статьи: C:Tempbase.txt

 Name,AtBats,Hits
Ken Myer,43,13
Pilar Ackerman,28,11
Jonathan Haas,37,17
Syed Abbas,41,20
Luisa Cazzaniga,22,6
Andrew Cencini,35,11
Baris Cetinok,19,4
  

Powershell:

 $colAverages = @()

$colStats =Import-Csv C:Tempbase.txt

foreach ($objBatter in $colStats)
  {
    $objAverage = New-Object System.Object
    $objAverage | Add-Member -type NoteProperty -name Name -value $objBatter.Name
    $objAverage | Add-Member -type NoteProperty -name BattingAverage -value ("{0:N3}" -f ([int] $objBatter.Hits / $objBatter.AtBats))
    $colAverages  = $objAverage
  }

$colAverages | Sort-Object BattingAverage -descending
  

Ответ №1:

Попробуйте $colAverages[0].name

 for ($i=0 ; $i -le $colAverages.Length ; $i  )
{
  $colAverages[$i].name
}
  

Или

 foreach ($a in $colAverages)
{
  $a.name
}
  

———- РЕДАКТИРОВАТЬ———-

 PS C:> $colAverages.GetType()

IsPublic IsSerial Name                     BaseType                                                
-------- -------- ----                     --------                                                
True     True     Object[]                 System.Array                                            


PS C:> $objAverage.GetType()

IsPublic IsSerial Name                     BaseType                                                
-------- -------- ----                     --------
True     True     Oject                            
  

Комментарии:

1. Хорошо, значение столбца является массивом, значение $objAverage — нет. Но почему Get-элемент выдает тот же результат? Я думал, что увижу разницу между этими двумя объектами…