$c.length просто выводит тонну, а не длину

Итак, я пытался изучить Powershell и играл, пытаясь создать следующий сценарий (чтобы взять все значения Starttime из Get-Process и сохранить их в форме, исключая часть Time объекта DateTime.)

    $a=( Get-Process |Where-Object ProcessName -NotMatch 'Idle' | Select-Object -property starttime);

 #I think Select-Object part may not be necessary, but left in as that's how 
 #I've coded it

 $b= $a.starttime; 

$c=New-Object System.Collections.Generic.List[DateTime];

$count=0; @(0..($b.length-1)).foreach({ Write-Host $count,$b[$_].ToShortDateString(); $c.add($b[$_].ToShortDateString()); $count++ }) 

И я думаю, что он делает то, что я хотел. Вызов$b[j]-$c[j]производит только значения минут, секунд, миллисекунд. Однако, когда я называю длины, я получаю следующее

$b.length

175

$c.length

1

1

1

так далее.,

Так почему это? Я не слишком разбираюсь в PowerShell (играю с ним около недели), и мне кажется, что$c.length должен выдавать то же значение, что и $b.length? Что я сделал по ошибке?

1 ответ

Решение

Во-первых, решение этой проблемы простое - используйте Count чтобы получить общее количество элементов в списке:

$c.Count

PowerShell, начиная с версии 4.0, поддерживает так называемое "перечисление свойств", что означает, что когда вы ссылаетесь на имя свойства в перечисляемом объекте (например, List[Datetime] например) с .оператор разрешения члена, а свойство не существует в указанном объекте, PowerShell попытается разрешить это имя свойства для элементов, содержащихся в перечисляемом объекте.

Общий List[] Тип не имеет Length property, отсюда и 175 индивидуальных результатов:)

Другие вопросы по тегам