首页 > 解决方案 > $c.length 只输出一吨,而不是长度

问题描述

我一直在尝试学习一些 PowerShell,并且正在尝试制作以下脚本(从 Get-Process 获取所有 Starttime 值并将它们保存在不包括 DateTime 对象的 Time 部分的形式中。)

    $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]只产生 Minutes、Seconds、Milliseconds 的值。但是,当我调用长度时,我得到以下信息

$b.length

175

$c.length

1

1

1

ETC。,

那么这是为什么呢?我不太精通powershell(已经玩了大约一个星期),我觉得好像$c.length应该吐出与$b.length?我做错了什么?

标签: powershell

解决方案


首先,这个问题的解决方案很简单 -Count用于获取列表中项目的总数:

$c.Count

PowerShell,从 4.0 版开始,支持称为“属性枚举”的东西,这意味着当您使用成员解析运算符引用可枚举对象(List[Datetime]例如)上的属性名称时.,该属性在被引用的对象上不存在, PowerShell 将尝试根据可枚举对象中包含的项目解析该属性名称。

泛型List[]类型没有Length属性,因此有 175 个单独的结果 :)


推荐阅读