Otimize a pesquisa de palavras-chave de documentos do Word

Estou tentando procurar palavras-chave em um grande número de documentos do MS Word e retornar os resultados para um arquivo. Eu tenho um roteiro de trabalho, mas não estava ciente da escala, e o que tenho não é suficientemente eficiente, levaria dias para percorrer tudo.

O script, como está agora, pega as palavras-chave do CompareData.txt e o executa por todos os arquivos em uma pasta específica, e depois o anexa a um arquivo.

Então, quando terminar, saberei quantos arquivos têm cada palavra-chave específica.

[cmdletBinding()] 
Param( 
$Path = "C:\willscratch\" 
) #end param 
$findTexts = (Get-Content c:\scratch\CompareData.txt)
Foreach ($Findtext in $FindTexts)
{
$matchCase = $false 
$matchWholeWord = $true 
$matchWildCards = $false 
$matchSoundsLike = $false 
$matchAllWordForms = $false 
$forward = $true 
$wrap = 1 
$application = New-Object -comobject word.application 
$application.visible = $False 
$docs = Get-childitem -path $Path -Recurse -Include *.docx  
$i = 1 
$totaldocs = 0 
Foreach ($doc in $docs) 
{ 
Write-Progress -Activity "Processing files" -status "Processing $($doc.FullName)" -PercentComplete ($i /$docs.Count * 100) 
$document = $application.documents.open($doc.FullName) 
$range = $document.content 
$null = $range.movestart() 
$wordFound = $range.find.execute($findText,$matchCase, 
  $matchWholeWord,$matchWildCards,$matchSoundsLike, 
  $matchAllWordForms,$forward,$wrap) 
  if($wordFound) 
    { 
     $doc.fullname 
     $document.Words.count 
     $totaldocs ++ 
  } #end if $wordFound 
$document.close() 
$i++ 
} #end foreach $doc 
$application.quit() 
"There are $totaldocs total files with $findText"  | Out-File -Append C:\scratch\output.txt

#clean up stuff 
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($range) | Out-Null 
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($document) | Out-Null 
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($application) | Out-Null 
Remove-Variable -Name application 
[gc]::collect() 
[gc]::WaitForPendingFinalizers() 
}

O que eu gostaria de fazer é descobrir uma maneira de pesquisar cada arquivo por tudo no CompareData.txt uma vez, em vez de iterá-lo várias vezes. Se eu estivesse lidando com um pequeno conjunto de dados, a abordagem que eu teria faria o trabalho - mas descobri que os dados em CompareData.txt e o diretório de arquivos do Word de origem serão muito grandes.

Alguma idéia de como otimizar isso?

questionAnswers(1)

yourAnswerToTheQuestion