【问题标题】:How Does Member Enumeration Work in PowerShell 3?PowerShell 3 中的成员枚举如何工作?
【发布时间】:2012-08-21 07:37:09
【问题描述】:

在 PoweShell 2 中我们做到了:

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

在 Powershell 3 中我们这样做:

(Get-ChildItem).LastWriteTime | Sort-Object

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

【问题讨论】:

    标签: powershell powershell-3.0


    【解决方案1】:

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

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

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

    在 v3 中,相当于:

    (Get-Process).Name
    

    同样适用于方法。杀死名称以 note* 开头的所有进程:

    (Get-Process note*).Kill()
    

    【讨论】:

    • 很好的答案,我从来不知道它也适用于方法。棒极了。我想知道它的速度有多快。
    【解决方案2】:

    博客说 foreach-object cmdlet 没有运行。现在它由语言引擎而不是 cmdlet 来处理,从而使其更快。它的具体工作原理是内部实现细节,我认为这不是你真正想知道的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-15
      • 2016-09-08
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多