は最近、私は次のように、(公式ドキュメントについてthis cmdlet and its parametersを参照してください)Get-ChildItem
のFilter
パラメータをunsing C:\Windows\winsxs
フォルダにある*.inf
ファイルについてPowerShellを経由してレポートを作成することでした。フィルタパラメータのGet-ChildItem実装でのFileSystem Providerエラー?
$infFiles = Get-ChildItem -Path C:\Windows\winsxs -Filter *.inf -Recurse
しかし私はそれを気づきました.inf_loc
または.inf_dbf42768
のような他のファイル拡張子を持つファイルも結果に含まれます。一方
、予想通りInclude
パラメータのみ.inf
ファイルを返し、動作します:
$infFiles = Get-ChildItem -Path C:\Windows\winsxs -Include *.inf -Recurse
私はPS版3と4を使用して現象を調べ、見つかった、もし延長ますことをしましたどんなファイルよりも正確に3文字を探している場合、それらのファイルの拡張子が長い場合でも、同じ3文字で始まる拡張子が返されます。探している拡張機能が3文字より短いか長い場合は、少なくとも私の経験に基づいてそのような問題はありません。 cmdlet descriptionで説明したように、それは、プロバイダレベルですでにフィルタリングを行うよう
パフォーマンスは、Include
パラメータよりも、私の場合に限り、私は理解して、Filter
パラメータを使用すると、より効率的になり、非常に重要ではありませんが。むしろ、それらが取得された後、オブジェクトをフィルタのPowerShellのWindows を持つよりも、オブジェクトを取得する際にプロバイダー がそれらを適用するため
フィルタは、他のパラメーターよりも効率的です。
とhere:
... -Filterパラメータは初期の生成、初期のフィルタリング、一方-含める は後早期にフィルタリングであります! 2つの方法の性能差 が重要であることが判明しました!
これは文書化された動作/バグですか?私はthe post mentioned beforeでも同様のものを見つけましたが、公式の文書では見つかりませんでした。