Как искать Windows Search, проиндексированный в файле
У меня есть файлы, проиндексированные службой поиска Windows. Мне нужна функция, которая может найти некоторую строку в текстовых файлах. У меня есть скрипт в 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".
Кто-нибудь знает, как это исправить?
1 ответ
Я считаю, что проблема с CONTAINS
в вашем запросе. Вы должны добавить подстановочный знак (*) к слову, которое вы ищете. Так что вместо:
WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('$word')
пожалуйста, попробуй:
WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('*$word*')