PowerShell найти файлы MS Word по ключевым словам - PullRequest
1 голос
/ 10 октября 2019

Я создал скрипт, который должен возвращать документ с определенным словом.

Он ищет ключевое слово в документе, чтобы найти нужный файл. Он находит файл, но также и множество других файлов, которые не содержат ключевое слово, но говорят, что * содержат ключевое слово

Что я делаю неправильнопожалуйста.

С уважением

#Client modules laden (https://www.microsoft.com/en-us/download/details.aspx?id=42038)
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"  
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"   
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Search.dll"


#Folder om mee verbinding te maken
$SourceFolder = "c:\test"
cd $SourceFolder

#Keywords waarop gezocht moet worden
$keyword1 = "25189"
$Forward = $true
$MatchWholeWord = $true


$Word = New-Object -ComObject Word.Application
$docs = Get-ChildItem -Path $SourceFolder -Recurse| Where-Object {$_.Name -like '*.doc*'} 

foreach ($doc in $docs)
{
    $condition1 = $word.Documents.Open($doc.FullName).Content.Find.Execute($keyword1,$Forward,$MatchWholeWord)

    if ($condition1 -match $true)
    {
        #$word.Application.ActiveDocument.Close()
        Write-Host -f Cyan "$doc contains $keyword1"
        #Move-Item -Path $doc.FullName -Destination $destination
        $word.Application.ActiveDocument.Close()
    }
    else
    {
        $word.Application.ActiveDocument.Close()
        Write-Host -f Red "$doc does not contain $keyword1"
    }
#Write-host -f Green $doc.Name 

}
$document.close()
Write-Host $doc.FullName
Stop-Process -Name "WINWORD"

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

@ Майк Спасибо, что помог мне.

Ваш скрипт работает лучше, чем мой, но он также находит файлы, которые не содержат ключевое слово, и говорит, что он содержит ключевое слово в этой строке Write-Host -f Cyan "$ doc содержит ключевое слово: '$ keyword1'».

Он даже находит файлы, в которых говорится об одном и том же файле «$ doc содержит ключевое слово:« $ keyword1 »» и «$ doc не содержит ключевое слово:« $ keyword1 »».

0 голосов
/ 10 октября 2019

Когда я запускаю ваш скрипт, он работает отлично. Я не могу найти проблему. Не могли бы вы попробовать мой сценарий. Существенных изменений нет, но, возможно, это подойдет вам:

add-type -AssemblyName "Microsoft.Office.Interop.Word"

#Folder om mee verbinding te maken
$SourceFolder = "c:\temp"
cd $SourceFolder

#Keywords waarop gezocht moet worden
$keyword1 = "25189"
$Forward = $true
$MatchWholeWord = $true

$Word = New-Object -ComObject Word.Application
$docs = Get-ChildItem -Path $SourceFolder -Include @("*.doc", "*.docx") -Recurse

foreach ($doc in $docs)
{
    $condition1 = $Word.Documents.Open($doc.FullName).Content.Find.Execute($keyword1,$Forward,$MatchWholeWord)

    switch($condition1)
    {
        $true
        {
            #$word.Application.ActiveDocument.Close()
            Write-Host -f Cyan "$doc contains the Keyword: '$keyword1'"
            #Move-Item -Path $doc.FullName -Destination $destination
            $word.Application.ActiveDocument.Close()
        }

        $false
        {
            $word.Application.ActiveDocument.Close()
            Write-Host -f Red "$doc does not contains the Keyword: $keyword1"
        }
    }

    Write-Host "Filename '$($doc.Fullname)"
    Write-Host "`r"
}

Stop-Process -Name "WINWORD"
...