ときどき、Windows サーチ サービスによってインデックスが作成された、ネットワーク上のいくつかのファイルを検索する必要があります。エクスプローラーの検索バーにパターンを入力すると、約 10 秒程度で結果が得られますが、次のコマンドを使用すると、通常、検索に数分 (2 ~ 3 分) かかります。
gci -Recurse -Filter "VaR*.xlsb"
インデックス付きファイル データベースを利用して検索を高速化する方法はありますか?
ときどき、Windows サーチ サービスによってインデックスが作成された、ネットワーク上のいくつかのファイルを検索する必要があります。エクスプローラーの検索バーにパターンを入力すると、約 10 秒程度で結果が得られますが、次のコマンドを使用すると、通常、検索に数分 (2 ~ 3 分) かかります。
gci -Recurse -Filter "VaR*.xlsb"
インデックス付きファイル データベースを利用して検索を高速化する方法はありますか?
私は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倍高速でしたが、この回答はインデックス付きファイルでのみ機能します