Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Pfad der Dokumentenvorlage mit einem Powershell Script ändern?

Frage Microsoft Microsoft Office

Mitglied: Janowitsch

Janowitsch (Level 1) - Jetzt verbinden

22.07.2014, aktualisiert 11:39 Uhr, 3160 Aufrufe, 7 Kommentare

Hallo Leute,

Anwender nehmen in Word leider viel zu oft alte Dokumente als Vorlage für neue Dokumente her und dann stimmen nach einem Wechsel des Fileservers irgendwann die Vorlagenpfade in den Addin-Einstellungen nicht mehr.

Ich beschäftige mich gerade mit Powershell. Stecke aber noch in den Anfängen fest.

Von daher meine Frage: Kann man die Änderung des Ablagepfades in den Word-Addins mit einem Powershell-Script ändern?

Im Moment gebe ich den Anwendern eine kleine Doku, mit der sie den Pfad manuell ändern können bzw. den hinterlegten Pfad löschen. Das kommt bei den Anwendern nicht gut an, da es sich in "Einzelfällen" um hunderte Dokumente handelt.
Klar könnte ich sagen, dass das ein selbstgemachtes Problem ist. Warum werden auch immer wieder alte Dokumente als Vorlage genommen und nicht einmal eine richtige Vorlage gebaut. Aber

Grüsse Janowitsch
Mitglied: colinardo
22.07.2014, aktualisiert um 11:59 Uhr
Hallo Janowitch,
hatten wir schon einige male diese Frage, hier bekommst du VBS-Scripte die dir die alten Vorlagenpfade aus mehreren Dokumenten entfernen:

Word mit Powershell zu automatisieren geht zwar auch über das COM-Objekt, ist aber nicht zu empfehlen da hier die Performance unterirdisch ist!

Grüße Uwe
Bitte warten ..
Mitglied: Janowitsch
22.07.2014, aktualisiert um 12:10 Uhr
Danke Uwe! Die entsprechenden Einträge habe ich schon gelesen. Da die Server Migration durch ist, kann ich mit den VB Scripten nicht viel anfangen. So ein Lauf würde viel zu viel Ausfall der entsprechenden Clients bedeuten.
Von daher die Frage nach einem Powershell Script. Wobei da ja auch das Dokument geöffnet werden würde? Und auch hier das Zeitproblem bestehen würde.

Grüsse Janowitsch
Bitte warten ..
Mitglied: colinardo
22.07.2014, aktualisiert um 12:33 Uhr
Zitat von Janowitsch:
Da die Server Migration durch ist, kann ich mit den VB Scripten nicht viel anfangen. So ein Lauf würde viel zu viel Ausfall der entsprechenden Clients bedeuten.
? verstehe ich nicht wieso. In der Nacht laufen lassen ?!
Von daher die Frage nach einem Powershell Script. Wobei da ja auch das Dokument geöffnet werden würde? Und auch hier das Zeitproblem bestehen würde.
Sicher, mit Powershell würde das ganze noch wesentlich langsamer ablaufen, deswegen habe ich das mit VBS gelöst!

Zum Beschleunigen des Vorganges sollte ein DNS-Name des alten Servers auf den neuen Zeigen, dann geht das ganze wesentlich schneller !!

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
22.07.2014, aktualisiert um 18:06 Uhr
So,
ich habe jetzt endlich mal Zeit gefunden mich damit nochmal zu beschäftigen (wollte ich sowieso) und eine Lösung nur mit Powershell erarbeitet, die ohne Benutzung des COM-Objektes funktioniert, und deswegen kein Öffnen der jeweiligen Datei mit Word nötig macht. Da die Word-Dokumente ja eigentlich Zip-Dateien sind in denen die entsprechenden Infos stehen, habe ich mir diese mal angeschaut und die benötigten Änderungen für das Entfernen der Vorlagen erarbeitet. Da die jeweiligen Infos dort in XML-Dateien stehen, war das eine saubere Sache.

Folgender Code ist dabei rausgekommen:

WICHTIGER HINWEIS: Der Code benötigt mindestens Powershell in Version 3.0 und das NET-Framework in Version 4.5, da erst dort die Methoden für ZIP-Dateien enthalten sind.
(Der Ordner für die Dateien wird in Zeile 9 angegeben, welcher dann rekursiv durchlaufen wird und alle *.docx und *.docm Dateien verarbeitet)
Vorlage (Template) von Word-Dokumenten entfernen (nur *.docx / *.docm)
01.
# Entfernt die Dokumentvorlage aus OpenXML Word Dokumenten 
02.
# Benötigt wird mindestens NET-Framework 4.5 und Powershell 3.0 
03.
 
04.
# benötigte Assemblies laden 
05.
Add-Type -AssemblyName System.IO.Compression 
06.
Add-Type -AssemblyName System.IO.Compression.Filesystem 
07.
 
08.
# Pfad zu den Dateien 
09.
$pathFiles = "E:\Ordner\Word-Dateien"  
10.
 
11.
$files = dir "$pathFiles\*.doc[xm]" -Recurse -File 
12.
foreach ($file in $files){ 
13.
    # Word-Dokument als ZIP-Datei im Update-Modus öffnen 
14.
    $zipfile = [System.IO.Compression.ZipFile]::Open($file.FullName,[System.IO.Compression.ZipArchiveMode]::Update) 
15.
     
16.
    # Temporäre Extrahierungs-Pfade für die Dateien die geändert werden 
17.
    $pathSettingsFile = "$pathFiles\settings.xml" 
18.
    $pathSettingsRelsFile = "$pathFiles\settings.xml.rels" 
19.
     
20.
    # Falls die temoporären Dateien existieren lösche sie 
21.
    if((Test-Path $pathSettingsFile)){del $pathSettingsFile -Force} 
22.
    if((Test-Path $pathSettingsRelsFile)){del $pathSettingsRelsFile -Force} 
23.
     
24.
    # Einträge der benötigte Dateien aus dem Dokument holen 
25.
    $entry1 = $zipfile.Entries | ?{$_.Fullname -eq 'word/settings.xml'} 
26.
    $entry2 = $zipfile.Entries | ?{$_.Fullname -eq 'word/_rels/settings.xml.rels'} 
27.
    # Wenn beide Dateien gefunden wurden ... 
28.
    if ($entry1 -and $entry2){ 
29.
        # word/settings.xml extrahieren 
30.
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry1,$pathSettingsFile) 
31.
        # word/_rels/settings.xml.rels extrahieren 
32.
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry2,$pathSettingsRelsFile) 
33.
        $xml = New-Object XML 
34.
        $xml.Load($pathSettingsFile) 
35.
        # alle aufgeführten Templates holen 
36.
        $allTemplates = $xml.settings.attachedTemplate 
37.
        # Nur wenn Vorlagen vorhanden sind ... 
38.
        if ($allTemplates){ 
39.
            write-host "Entferne Vorlage aus Dokument '$($file.Fullname)' ..." -ForegroundColor Green 
40.
            # Template Nodes entfernen 
41.
            $allTemplates | %{$xml.settings.RemoveChild($_) | out-null} 
42.
            $xml.Save($pathSettingsFile) 
43.
 
44.
            # Template-Verweise im settings-rels-File entfernen und speichern 
45.
            $xml.Load($pathSettingsRelsFile) 
46.
            $allTemplates | %{$id = $_; $xml.Relationships.Relationship | ?{$_.Id -eq $id} | %{$xml.Relationships.RemoveChild($_) | out-null}} 
47.
            $xml.Save($pathSettingsRelsFile) 
48.
         
49.
            # alte Dateien aus der Word-Datei entfernen 
50.
            $entry1.Delete() 
51.
            $entry2.Delete() 
52.
 
53.
            # geänderte Dateien wieder hinzufügen 
54.
            [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipfile,$pathSettingsFile,'word/settings.xml') | out-null 
55.
            [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipfile,$pathSettingsRelsFile,'word/_rels/settings.xml.rels') | out-null 
56.
 
57.
            # Temporäre Files löschen 
58.
            del $pathSettingsFile -Force -ErrorAction SilentlyContinue 
59.
            del $pathSettingsRelsFile -Force -ErrorAction SilentlyContinue 
60.
        }else{ 
61.
            write-host "Im Dokument '$($file.FullName)' wurde keine externe Vorlage gefunden." -ForegroundColor Magenta 
62.
63.
64.
    # Zipfile-Resourcen freigeben 
65.
    $zipfile.Dispose() 
66.
}
Wenn man den Vorlagenpfad jedoch nicht entfernen sondern z.B. den Servernamen oder Pfad ändern möchte kann dies mit diesem Script geschehen. Zusätzlich zum Pfad in Zeile 9 sind der alte und der neue Name in Zeilen 11 und 13 anzugeben.
Vorlagenpfad von Word-Dokumenten ändern/austauschen (nur *.docx / *.docm)
01.
# Ändert den Pfad bzw. Server einer Dokumentvorlage aus OpenXML Word Dokumenten 
02.
# Benötigt wird mindestens NET-Framework 4.5 und Powershell 3.0 
03.
 
04.
# benötigte Assemblies laden 
05.
Add-Type -AssemblyName System.IO.Compression 
06.
Add-Type -AssemblyName System.IO.Compression.Filesystem 
07.
 
08.
# Pfad zu den Dateien 
09.
$pathFiles = "E:\Ordner\Word-Dokumente"  
10.
# alter Pfad 
11.
$oldPath = '\\SERVEROLD\docs' 
12.
# neuer Pfad 
13.
$newPath = '\\SERVERNEW\docs' 
14.
 
15.
$files = dir "$pathFiles\*.doc[xm]" -Recurse -File 
16.
foreach ($file in $files){ 
17.
    # Word-Dokument als ZIP-Datei im Update-Modus öffnen 
18.
    $zipfile = [System.IO.Compression.ZipFile]::Open($file.FullName,[System.IO.Compression.ZipArchiveMode]::Update) 
19.
     
20.
    # Temporäre Extrahierungs-Pfade für die Dateien die geändert werden 
21.
    $pathSettingsRelsFile = "$pathFiles\settings.xml.rels" 
22.
     
23.
    # Falls die temoporären Dateien existieren lösche sie 
24.
    if((Test-Path $pathSettingsRelsFile)){del $pathSettingsRelsFile -Force} 
25.
     
26.
    # Einträge der benötigten Dateien aus dem Dokument holen 
27.
    $entry1 = $zipfile.Entries | ?{$_.Fullname -eq 'word/_rels/settings.xml.rels'} 
28.
 
29.
    # Wenn Datei gefunden wurde ... 
30.
    if ($entry1){ 
31.
        # word/_rels/settings.xml.rels extrahieren 
32.
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry1,$pathSettingsRelsFile) 
33.
        $xml = New-Object XML 
34.
        $xml.Load($pathSettingsRelsFile) 
35.
        $rels = $xml.Relationships.Relationship | ?{$_.Target -like "*$oldPath*"} 
36.
        if ($rels){ 
37.
            write-host "Entferne Vorlage aus Dokument '$($file.Fullname)' ..." -ForegroundColor Green 
38.
            $rels | %{$_.Target = $_.Target.Replace($oldPath,$newPath)} 
39.
            $xml.Save($pathSettingsRelsFile) 
40.
         
41.
            # alte Dateien aus der Word-Datei entfernen 
42.
            $entry1.Delete() 
43.
 
44.
            # geänderte Dateien wieder hinzufügen 
45.
            [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipfile,$pathSettingsRelsFile,'word/_rels/settings.xml.rels') | out-null 
46.
 
47.
            # Temporäre Files löschen 
48.
            del $pathSettingsRelsFile -Force -ErrorAction SilentlyContinue 
49.
        }else{ 
50.
            write-host "Im Dokument '$($file.FullName)' wurde keine externe Vorlage die dem Server entspricht gefunden." -ForegroundColor Magenta 
51.
52.
53.
    # Zipfile-Resourcen freigeben 
54.
    $zipfile.Dispose() 
55.
}
Hat hier mit 20 Testdateien einwandfrei funktioniert. Teste es mal bei dir

Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: colinardo
29.07.2014, aktualisiert um 10:55 Uhr
Wenn's das dann war, den Beitrag bitte noch auf gelöst setzen nicht vergessen. Merci.
Bitte warten ..
Mitglied: ronvaradeo
13.08.2015 um 12:37 Uhr
@colinardo

Das Script schaut schon sehr gut aus. Mit Docx funktioniert es sehr gut. Unser derzeitiges Problem ist aber das wir zu 90% mit .doc und .rtf-Dateien arbeiten.

Folgender Fehler wird uns beim Ausführen des Scripts angezeigt (nur für .doc - ohne [xm] im Code):


Ausnahme beim Aufrufen von "Open" mit 2 Argument(en): "Das Ende des Datensatzes im zentralen Verzeichnis wurde nicht gefunden."
In \\Server\Kunde\ChangeDOT_Delete_template.ps1:16 Zeichen:5

$zipfile = [System.IO.Compression.ZipFile]::Open($file.FullName,[System.IO.C ...

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidDataException
Bitte warten ..
Mitglied: colinardo
13.08.2015, aktualisiert um 13:25 Uhr
Hallo @ronvaradeo,
das Script ist nur für die neuen Dokumentformate geeignet! Die alten Binärformate lassen sich mit dieser Methode nicht bearbeiten, da sie intern keine ZIP-Struktur aufweisen ! Steht aber auch FETT gedruckt über den Skripten!

Für die alten Formate benutze die oben bereits verlinkten VBS Skripte.

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
Powershell Script aus VBA heraus ausführen (2)

Frage von mcnico1978 zum Thema VB for Applications ...

Batch & Shell
gelöst Powershell-Script als Admin über CMD ausführen (2)

Frage von Tobiased zum Thema Batch & Shell ...

Batch & Shell
Windows Explorer hängt sich bei Powershell Script auf (5)

Frage von zamsi7 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...