【发布时间】:2012-12-07 20:07:41
【问题描述】:
编辑希望在这里澄清我令人费解和误导的问题......基于我错误的假设 -file 接受输入。感谢您直截了当地指出这只是一个开关参数;我的示例中的输入实际上被传递给 -path。听起来这可能是搜索多种文件类型的最快的纯 powershell 方法,因为 -filter 只接受单个输入,而 -include 更慢。
get-childItem documentation 表示“过滤器比其他参数更有效,因为提供程序在检索对象时应用它们,而不是在检索对象后让 Windows PowerShell 对其进行过滤。”
v3 有一个带有 -file 参数的new parameter set,可能是为了排除目录,以匹配 cmd.exe 的dir /a:-d
与 -include 和 -filter 不同,-file 接受多个,如gci -file "*.ldf","*.bak"
所以我想知道,并且到目前为止未能可靠地测试,如果 -file 从性能角度来看就像 -filter,即“更有效”,或者更像 -include 等“其他参数”。如果 -file 是一个过滤器,那很好,因为 afaict -filter 一次只处理一个过滤器,所以如果你想要多个过滤器(如 *.ldf 和 *.bak),那么你需要运行 gci -filter 两次或使用 -改为包括。所以我想知道 -file 是否能让我们获得一个过滤器的效率优势,用于多个过滤器。
我偶然发现了一些让我感到乐观的错误文本。 -file 参数希望 -path 成为当前目录,因此 gci -path $path -file "*.bak","*.ldf" 给出错误。推送定位似乎是一种可行的解决方法,但在这里我对错误文本的内容更感兴趣:
Get-ChildItem:无法将“System.Object[]”转换为参数“Filter”所需的类型“System.String”。不支持指定的方法。
我调用了-file,但错误抱怨“参数'过滤器'”。所以也许 -file 像过滤器一样有效? OTOH,-filter 不需要 -path 是当前目录,所以在这方面 -file 更像 -include。
【问题讨论】:
-
我可以告诉你 -file(和 -Directory)比 -Include 或 ?{$_.PsIsContainer} 快得多
-
至少在我的轶事测试中,-File 比 -Filter 快。
标签: powershell filter powershell-3.0 get-childitem