成员枚举如何在PowerShell 3中工作?

时间:2012-08-26 15:36:27

标签: powershell powershell-v3.0

在PoweShell 2中,我们做到了:

Get-ChildItem | ForEach-Object {$_.LastWriteTime} | Sort-Object  

在Powershell 3中,我们做到了:

(Get-ChildItem).LastWriteTime | Sort-Object

但它是如何工作的,我在MSDN上阅读了this博客帖子,他们说它更快,因为foreach循环没有运行?那么它如何枚举属性呢?

2 个答案:

答案 0 :(得分:7)

PowerShell正在为我们做艰苦的工作,它在内部循环遍历集合。我喜欢称之为“隐含的foreach”。假设您指定的成员出现在每个对象上,如果您指定的成员是属性,则返回其值。如果它是一个方法,它会调用每个对象上的方法。

在v2中,要获取所有进程名称,您必须自己处理循环:

Get-Process | Foreach-Object {$_.Name}

在第3版中,等效的是:

(Get-Process).Name

同样适用于方法。要终止名称以note *:

开头的所有进程
(Get-Process note*).Kill()

答案 1 :(得分:0)

该博客称foreach-object cmdlet未运行。现在它由语言引擎而不是cmdlet处理,使其更快。它是如何工作的是内部实现细节,我认为这不是你真正想知道的。