如何使用Powershell搜索Windows搜索索引文件

5

偶尔我需要在我的网络中查找一些文件,这个网络是由Windows Search服务索引的。在资源管理器搜索栏输入关键词可以在大约10秒钟内得到结果,但是当我使用以下命令时,搜索通常需要2到3分钟。

gci -Recurse -Filter "VaR*.xlsb"

有没有一种方法可以利用索引文件数据库来加速我的搜索?

请查看这些关于如何加速gci的详细答案: https://dev59.com/F2w05IYBdhLWcg3wgyHI - David Ruhmann
谢谢@DavidRuhmann,答案中的代码确实比gci快。 - kb_sou
1个回答

11

我通过将一个 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倍,但这个答案只适用于有索引的文件。


2
建议的修订以改善路径分辨率:http://pastebin.com/raw.php?i=qLb8DYT9 - mstrange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接