$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 индивидуальных результатов:)