Von Beispielen im Netz habe ich dieses Skript zusammengeschustert, die ich hoffe, Word .doc Dateien als plainText speichern. Es tut nicht.Probleme mit Powershell und Word SaveAs()
Zuerst wird das Word-Fenster, wenn ich gegeben habe $ word.Visible = $ False.
Dann wird ein Dialogfenster gefragt, ob ich eine schreibgeschützte Kopie öffnen möge. Niemand hat das Dokument geöffnet. Warum fragt es?
Schließlich sagt die Fehlermeldung, dass ich eine Typkonflikt haben. Warum das?
PS H:\d2> .\wl.ps1
Processing : H:\d2\checklists\Extract checklist_20120306.doc
Name is now: H:\d2\checklists\Extract checklist_20120306.txt
Exception calling "SaveAs" with "2" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"
At H:\d2\wl.ps1:19 char:5
+ $opendoc.SaveAs([ref]$name.Value,[ref]$saveFormat)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException
Hier ist der Quellcode für das Skript.
$srcfiles = Get-ChildItem -Path . -Recurse -Filter "*.doc*"
$saveFormat = [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatText
$word = new-object -comobject word.application
$word.Visible = $False
ForEach ($doc in $srcfiles) {
Write-Host "Processing :" $doc.fullname
$name = Join-Path -Path $doc.DirectoryName -ChildPath $($doc.BaseName + ".txt")
Write-Host "Name is now:" $name
$opendoc = $word.documents.open($doc.FullName)
$opendoc.SaveAs([ref]$name.Value,[ref]$saveFormat)
$opendoc.Close()
$doc = $null
}
$word.quit()
Vielen Dank, @Nick. Ich musste 'Get-Process WINWORD' verwenden, um es zu finden. Und ich habe immer noch die "type Mismatch" Nachricht. $ PSVersionTable meldet 4.0. Irgendwelche Ideen? – lit
Ah yep es ist WINWORD, ging aus Speicher wird die Antwort aktualisieren. In deiner Frage hast du '$ name.Value', Können Sie den '.Value' entfernen, so dass die Zeile genau so ist wie in meiner Antwort? Oder hast du das? @Liturgist – Nick
Entschuldigung, ich vermisste das Entfernen von '.value'. Aber, wenn ich es entferne, bekomme ich '[ref] kann nicht auf eine Variable angewendet werden, die nicht existiert. Dann, wenn ich' [ref] 'Ich bekomme' Argument: '1' sollte ein System.Management sein .Automation.PSReferenz. Verwenden Sie [ref] .' – lit