PowerShell通过关键字查找MS Word文件



我做了一个应该返回特定word文档的脚本。

它在文档中搜索关键字以查找正确的文件。它找到文件,但也找到许多其他不包含关键字的文件,但它说它确实包含关键字

请问我做错了什么。

问候

#Client modules laden (https://www.microsoft.com/en-us/download/details.aspx?id=42038)
Add-Type -Path "c:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions16ISAPIMicrosoft.SharePoint.Client.dll"  
Add-Type -Path "c:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions16ISAPIMicrosoft.SharePoint.Client.Runtime.dll"   
Add-Type -Path "c:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions16ISAPIMicrosoft.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"

@Mike 谢谢你帮助我。

您的脚本比我的脚本效果更好,但它也会找到不包含关键字的文件,并说它包含此行中的关键字 Write-Host -f Cyan"$doc包含关键字:'$keyword 1'"。

它甚至可以找到同一文件"$doc包含关键字:"$keyword 1"和"$doc不包含关键字:"$keyword 1"的文件。

当我运行您的脚本时,它可以完美运行。我找不到问题。你能试试我的剧本吗?没有重大变化,但也许这对您有用:

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"

最新更新