偶尔我需要在我的网络中查找一些文件,这个网络是由Windows Search服务索引的。在资源管理器搜索栏输入关键词可以在大约10秒钟内得到结果,但是当我使用以下命令时,搜索通常需要2到3分钟。
gci -Recurse -Filter "VaR*.xlsb"
有没有一种方法可以利用索引文件数据库来加速我的搜索?
偶尔我需要在我的网络中查找一些文件,这个网络是由Windows Search服务索引的。在资源管理器搜索栏输入关键词可以在大约10秒钟内得到结果,但是当我使用以下命令时,搜索通常需要2到3分钟。
gci -Recurse -Filter "VaR*.xlsb"
我通过将一个 VB脚本 改编成Powershell来找到了我的答案,以下是代码:
Function Search {
param (
[Parameter(ValueFromPipeline = $true)][string]$Path,
[Parameter(Mandatory=$true)][string]$Pattern)
if($Path -eq ""){$Path = $PWD;}
$pattern = $pattern -replace "\*", "%"
$path = $path + "\%"
$con = New-Object -ComObject ADODB.Connection
$rs = New-Object -ComObject ADODB.Recordset
$con.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")
$rs.Open("SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE System.FileName LIKE '" + $pattern + "' AND System.ItemPathDisplay LIKE '" + $path + "'" , $con)
While(-Not $rs.EOF){
$rs.Fields.Item("System.ItemPathDisplay").Value
$rs.MoveNext()
}
}
这种方法非常快。我测试了David所指出的答案,它比那个答案快3倍,但这个答案只适用于有索引的文件。