2017-09-25 20 views
1

最近我創建通過PowerShell的有關地處C:\Windows\winsxs文件夾unsing的Get-ChildItemFilter參數*.inf文件報告(見官方文檔大約this cmdlet and its parameters),如: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個字符,根據我的經驗,至少沒有這樣的問題。

雖然表現在我的情況並不重要,因爲據我所知,使用Filter參數會更有效,比Include參數,因爲它在提供商等級進行濾波已經,如cmdlet description討論:

篩選器比其他參數更有效,因爲提供 檢索對象的時候,而不是擁有Windows 他們被檢索後PowerShell的過濾器的對象適用於他們。

here

...篩選參數產生早,過濾, 而-包括後來的早期篩選!兩種方法之間的性能差異 事實證明是顯着的!

它是一個記錄的行爲/錯誤?我在the post mentioned before中也找到類似的東西,但在官方文檔中找不到。

回答

1

根據鏈接的問題,這看起來像-Filter參數的限制。我想另一個解決辦法是仍然使用-Filter其性能優勢,但隨後過濾掉多餘的結果,你不Where-Object事後想:

Get-ChildItem -filter "*.inf" | where {$_ -match "\.inf$"} 

它使用正則表達式$字符返回只有在.inf是字符串的結尾。