Megpróbálok PowerShell-szkriptet írni, hogy lépéseket tegyek több Word dokumentumon. A Word 2010 telepítve van a gépemen, de úgy tűnik, nem tudom elérni a szkriptet a dokumentumok megnyitásához. Íme a forgatókönyv
$path = "C:\MyPath"
Add-Type -AssemblyName Microsoft.Office.Interop.Word
$wordFiles = Get-ChildItem -Path $path -include *.doc, *.docx -recurse
$objWord = New-Object -ComObject "word.application"
$objWord.visible = $false
foreach($wd in $wordFiles)
{
$doc = $objWord.documents.open($wd.fullname)
#InsertProcessingFunctionsHere
$doc.Save()
$objWord.Documents.Close()
}
$objWord.Quit()
Megpróbálom ezt futtatni, és a PowerShelltől kapott hiba a következő:
Exception calling "Open" with "1" argument(s): "Command failed"
At C:\Scripts\Process-WordDocs.ps1:10 char:31
+ $doc = $objWord.documents.open <<<< ($wd.fullname)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
You cannot call a method on a null-valued expression.
At C:\Scripts\Process-WordDocs.ps1:13 char:10
+ $doc.Save <<<< ()
+ CategoryInfo : InvalidOperation: (Save:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Exception calling "Close" with "0" argument(s): "This method or property is not available because a document window is not active."
At C:\Scripts\Process-WordDocs.ps1:14 char:25
+ $objWord.Documents.Close <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Az MSDN szerint a document.open csak 1 argumentumot igényel, a többi opcionális. Azonban egy C# példa, amit a neten láttam, azt mutatta, hogy egy "ReadOnly: False" paramétert adtak át a document.open-nek. Átlépve a szkriptet az ISE Debuggerben, látom, hogy a $wd.fullname ott van, és egy érvényes fájlra mutat, így teljesen érthetetlen, hogy miért nem nyílik meg. Először azt hittem, hogy ez azért van, mert az operációs rendszer 64 bites verzióját (az Office 32 bites verzióját) használom, de a 32 bites PowerShell-munkamenetből származó parancsfájl próbálkozása ugyanazt a hibát eredményezte. Van valakinek rálátása arra, hogy ez miért fordulhat elő, és hogyan tudnám orvosolni? Azt szeretném, ha az összes feldolgozás láthatatlanul történne a felhasználó számára. Minden segítséget nagyon szívesen vennénk. Előre is köszönöm az idejét.