在得到-childItem的新文件参数快得像型滤波器或慢的像-include?(is get-chi

2019-08-03 16:54发布

编辑希望能在这里澄清我费解的和误导性的问题......根据我对-file接受输入错误的假设。 谢谢你往那儿我,并指出这只是一个开关参数; 在我的例子投入实际上得到传递给-path。 听起来像可能以搜索多种文件类型最快纯粹的powershell方式,由于-filter只接受单个输入和-include较慢。

一开始childItem 文件说,“筛选器比其他参数更有效,因为提供检索对象的时候,而不是由Windows PowerShell筛选对象,他们被检索后应用它们。”

v3具有一个新的参数设置与文件参数,可能意味着不包括目录,以匹配CMD.EXE的dir /a:-d

像-include和不同的筛选器,-file接受多个,如gci -file "*.ldf","*.bak"

所以我不知道,并且迄今未能可靠地测试,如果-file就像是从性能的角度来看型滤波器,即“更有效率”,还是更喜欢“其他参数”像-include。 如果-file是一个过滤器,这很好,因为AFAICT的筛选器一次只能处理一个过滤器,所以如果你想多个过滤器(如* .LDF和名为* .bak),那么你需要或者运行gci -filter两次或使用-包括代替。 所以我想知道如果-file让我们获得一个过滤器的效率优势,为多个过滤器。

我偶然在那的让我乐观一些错误文本。 文件参数要-path成为当前目录,所以这个gci -path $path -file "*.bak","*.ldf"给出了一个错误。 推位置似乎是一个可行的解决办法,但在这里我更感兴趣的是错误的文本内容:

获取-ChildItem:无法将“System.Object的[]”的类型“System.String”要求的参数“过滤器”。 不支持指定的方法。

我叫-file而是“参数‘过滤器’的”错误抱怨。 因此,也许-file高效就像一个过滤器? OTOH,-filter不需要-path是当前目录,因此在这方面-file更像-include。

Answer 1:

只是一个精度:

gci -path $path -file "*.bak","*.ldf"

-file是一个switch parameter (如-directory是),不接受值(为了获得唯一的文件,使用文件参数和省略目录参数要排除的文件,使用目录参数,并省略了文件参数。); 那么"*.bak","*.ldf"被隐式传递给-filter为值, filter只接受string ,而不是string[] 这就是来自何方您的错误。

关于性能:使用-file-directory比使用更快的where-object psiscontainer? { !$_.psiscontainer} ? { !$_.psiscontainer}因为它的供应商(在这种情况下,文件系统)级别进行。



文章来源: is get-childItem's new -file parameter fast like -filter or slow like -include?