2

PoweShell 2 では、次のことを行いました。

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

Powershell 3 では、次のことを行います。

(Get-ChildItem).LastWriteTime | Sort-Object

MSDN でこのブログ投稿を読んだところ、foreach ループが実行されていないため高速であるとのことでした。では、どのようにプロパティを列挙するのでしょうか?

4

2 に答える 2

10

PowerShellは私たちのために大変な作業を行っており、コレクションを内部でループします。これを「暗黙のforeach」と呼びたいと思います。指定したメンバーが各オブジェクトに存在すると仮定すると、指定したメンバーがプロパティである場合は、その値が返されます。メソッドの場合は、各オブジェクトでメソッドを呼び出します。

v2では、すべてのプロセス名を取得するには、ループを自分で処理する必要がありました。

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

v3では、同等のものは次のようになります。

(Get-Process).Name

同じことがメソッドにも当てはまります。note *で始まる名前のすべてのプロセスを強制終了するには:

(Get-Process note*).Kill()
于 2012-08-26T19:46:02.310 に答える
0

ブログには、 foreach-object コマンドレットが実行されていないと書かれています。現在は、コマンドレットではなく言語エンジンによって処理されるため、処理が高速化されています。それが正確にどのように機能するかは内部実装の詳細であり、それはあなたが本当に知りたいことではないと思います.

于 2012-08-26T17:40:12.830 に答える