2016-10-19 3 views
0

Мне нужно пройти тысячи документов, ищущих строку. Когда я это сделаю, документ слова появляется на экране, а затем исчезает после удаления объекта.

Существует параметр метода Documents.OpenNoRepairDialog, который находится в положении 13 для контроля видимости. Я не могу заставить любую комбинацию работать за пределами трех параметров, перечисленных в коде. Есть ли способ, чтобы эти документы были видны при запуске кода и превращении моего экрана в стробоскопический свет?

$Doc = $Word.Documents.OpenNoRepairDialog($file,$false,$true) - это та часть, с которой мне нужна помощь. Я получаю ошибки при попытке добавить дополнительные аргументы, такие как $null.

$Word = New-Object -comobject Word.Application 
$Word.Visible = $false 
$word.DisplayAlerts = "wdAlertsNone" 
$Doc = $Null 
$DocContent = $Null 
$Doc = $Word.Documents.OpenNoRepairDialog($file,$false,$true) 
$DocContent = $Doc.Content.Text | Select-String -Pattern $Using:SearchStrings 

If($DocContent) 
{ 
    Write-Verbose "Match in $_ for Word" -Verbose 
    Write-Output "Match in $_" | Out-File -FilePath $Using:OutputFilePath -Append 
} 
Else 
{ 
    Write-Verbose "No Match" -Verbose 
} 

$Word.Documents.Close() 
$Word.Quit() 

While([System.Runtime.InteropServices.Marshal]::ReleaseComObject($DocContent)){} 
While([System.Runtime.InteropServices.Marshal]::ReleaseComObject($Doc)){} 
While([System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word)){} 

Remove-Variable -Name DocContent 
Remove-Variable -Name Doc 
Remove-Variable -Name Word 

ответ

0

Я не пробовал это, но он смотрит на меня, что solution предложенный @JasonMArcher может помочь. Он позволяет передавать параметры методам объектов COM по имени и пропускать все необязательные параметры. Я бы попробовал что-то в следующих строках:

$Documents = $Word.Documents 
Invoke-NamedParameter $Documents "OpenNoRepairDialog" @{"FileName"="$file";"Visible"="$false"}