Использование SaveAs для объекта Word из PowerShell завершается неудачно с ошибкой аргумента [ref]

Я использую Word для преобразования docx в PDF из PowerShell, открыв документ и написав его с помощью SaveAs(),

Мой код:

# got that hint from http://stackru.com/questions/36487507/troubles-using-powershell-and-word-saveas
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Word") | Out-Null

$Word = New-Object -ComObject "Word.Application"
$Word.Visible = $False
foreach ($transf_file in $doc_path) {
  $transf_pdf_file = $transf_file -replace "`.docx?$", ".pdf"
  $rel_path = Split-Path -Parent $transf_file
  Copy-Item -Path "$src_pp_dir\$transf_file" -Destination "$dest_pp_dir\$rel_path" -Force
  $word_doc = $Word.Documents.Open( "$dest_pp_dir\$transf_file" )
  # Hess / Herlet workaround die nächste Zeile einkommentieren, die übernächste Zeile auskommentieren
  #$word_doc.SaveAs( "$dest_pp_dir\$transf_pdf_file" ,17 ) 
  $word_doc.SaveAs( [ref] [system.object] "$dest_pp_dir\$transf_pdf_file" ,[ref]17)  
  $word_doc.Close() 
  Remove-Item -Force -Path "$dest_pp_dir\$transf_file" 
}
# this line avoids saving of normal.dot what is normally requested when another
# Word is open in parallel
# the rest is necessary to kill this word process (otherwise they sum up in the
# system and after a while it doesn't work anymore)
$Word.NormalTemplate.Saved = $true
$Word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Word) > $null
Remove-Variable Word 

Код работает на моем компьютере, как и ожидалось. На компьютере коллеги линия:

$word_doc.SaveAs( [ref] [system.object] "$dest_pp_dir\$transf_pdf_file" ,[ref]17) 

выдает ошибку:

Аргумент: "1" не должно быть System.Management.Automation.PSReference. Не делайте
используйте [ref].
В D:\DMG\NX_Projekte\handle\PP-Encode.ps1:1015 char:7
+ $word_doc.SaveAs( [ref] [system.object] "$dest_pp_dir\$transf_pdf_file",[ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo: NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId: RefArgumentToNonRefParameterMsg

На его машине раньше линия (теперь как комментарий, без [ref]), работает отлично.

Что я проверил:

  • Мы используем идентичные версии PowerShell, Word, Word COM-объектов, .NET Framework.
  • Я отсканировал подсказки на этом сайте и улучшил, в частности, выход из Word (убедившись, что все процессы Word завершены - что происходит на моем компьютере).
  • Я не мог найти никаких намеков на эту конкретную проблему ни здесь, ни где-либо еще.

0 ответов

Другие вопросы по тегам