1

Windows Search サービスによってインデックス付けされたファイルがあります。テキストファイル内の文字列を見つけることができる関数が必要です。PowerShell にスクリプトがありますが、うまくいきませんでした。

function search {
    param($path, $word)

    $c = $path + "\%"
    $query = "SELECT
        System.ItemName, System.ItemPathDisplay
    FROM SystemIndex
    WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('$word')"

    $ADOCommand = New-Object -ComObject ADODB.Command
    $ADOConnection = New-Object -ComObject ADODB.Connection
    $RecordSet = New-Object -ComObject ADODB.RecordSet
    $ADOConnection.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")

    $RecordSet.Open($query, $ADOConnection) 
    try { $RecordSet.MoveFirst() }
    catch [System.Exception] { "no records returned" }
    while (-not($RecordSet.EOF)) {
        if ($locatedFile) { Remove-Variable locatedFile }
        $locatedFile = New-Object -TypeName PSObject
        Add-Member -InputObject $locatedFile -MemberType NoteProperty -Name 'Name' -Value ($RecordSet.Fields.Item("System.ItemName")).Value
        Add-Member -InputObject $locatedFile -MemberType NoteProperty -Name 'Path' -Value ($RecordSet.Fields.Item("System.ItemPathDisplay")).Value
        $locatedFile
        $RecordSet.MoveNext()
    }

    $RecordSet.Close()
    $ADOConnection.Close()
    $RecordSet = $null
    $ADOConnection = $null
    [gc]::Collect()  
}

$word = "Hello"私たちが持っているファイルで問題なく動作する場合

*いくつかのテキスト * こんにちは *いくつかのテキスト*

ただし、次のようなスペースのない Hello がある場合はそうではありません。

こんにちは世界

$wordまた、"Hello World" などのフレーズも検索できません。

誰でもそれを修正する方法を知っていますか?

4

1 に答える 1