5

ときどき、Windows サーチ サービスによってインデックスが作成された、ネットワーク上のいくつかのファイルを検索する必要があります。エクスプローラーの検索バーにパターンを入力すると、約 10 秒程度で結果が得られますが、次のコマンドを使用すると、通常、検索に数分 (2 ~ 3 分) かかります。

gci -Recurse -Filter "VaR*.xlsb"

インデックス付きファイル データベースを利用して検索を高速化する方法はありますか?

4

1 に答える 1

11

私はvbsスクリプトを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倍高速でしたが、この回答はインデックス付きファイルでのみ機能します

于 2012-12-18T14:14:48.610 に答える