Top-Themen

Aktuelle Themen (A bis Z)

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?

Mitglied: Janowitsch

Janowitsch (Level 1) - Jetzt verbinden

22.07.2014, aktualisiert 11:39 Uhr, 5756 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 ..
Ähnliche Inhalte
Batch & Shell

PowerShell - Sheduled Task - Script vom UNC-Pfad

gelöst Frage von emeriksBatch & Shell3 Kommentare

Hi, ich will ein PowerShell-Script von einem UNC-Pfad starten. Wenn ich das Script mit einem Domänen-Benutzer starte, welcher lokaler ...

Batch & Shell

Powershell Pfad überprüfen

gelöst Frage von H41mSh1C0RBatch & Shell11 Kommentare

Hi @ PS Profis, Irgendwie seh ich den Wald vor lauter Bäumen nicht. (oder es ist einfach Zeit für ...

Batch & Shell

Hiiilfe - Powershell and BackgroundGUI SAPIEN POWERSHELL

Frage von today12Batch & Shell1 Kommentar

Hallo Leute, ich bin kurz vorm Verzweifeln :O Ich beschäftige mich schon fast den ganzen Tag mit der Thematik ...

Batch & Shell

Powershell: Variable in Pfad einbauen

gelöst Frage von ThunderbirdOPBatch & Shell2 Kommentare

Hallo Leute, ich würde gerne eine Variable in einen Pfad einsetzen, bekomme aber immer den Fehler zurück, dass der ...

Neue Wissensbeiträge
Windows Server

Active Directory ESE Version Store Changes in Server 2019

Information von Dani vor 1 TagWindows Server

Moin, Last month at Microsoft Ignite, many exciting new features rolling out in Server 2019 were talked about. But ...

Exchange Server

Microsoft Extending End of Support for Exchange Server 2010

Information von Dani vor 1 TagExchange Server3 Kommentare

Moin, After investigating and analyzing the deployment state of an extensive number of Exchange customers we have decided to ...

Schulung & Training

Humble Book Bundle: Network and Security Certification 2.0

Tipp von NetzwerkDude vor 1 TagSchulung & Training

Abend, bei HumbleBundle gibts mal wider ein schönes Paket e-books: sind verschiedene Zertifizierungen wie MCSA, CCNA, CompTIA etc., für ...

Voice over IP

Telekom Umstellung von ISDN Anlagenanschluss auf IP-Telefonie

Erfahrungsbericht von NixVerstehen vor 4 TagenVoice over IP7 Kommentare

Hallo zusammen, nachdem nun vor ein paar Tagen die zwangsweise Umstellung von ISDN auf IP-Telefonie problemlos über die Bühne ...

Heiß diskutierte Inhalte
Notebook & Zubehör
Hardwareberatung: Business Notebook
gelöst Frage von waellerNotebook & Zubehör34 Kommentare

Hallo zusammen, da wir bislang nur MacBooks im Einsatz haben - nun aber auf Windows umsteigen werden - bräuchte ...

Netzwerke
Seltsame Verbindungsprobleme nach Netzwerk-Switch-Tausch
Frage von MondragorNetzwerke16 Kommentare

Hallo an alle. Ich habe gestern in der Firma das NEtzwerkswitch gegen ein moderneres, leistungsstärkeres getauscht. Das alte war ...

Drucker und Scanner
Suche Laserdrucker (Duplex) mit 3 Papierfächern der NICHT ständig Papier frisst
Frage von mabiesDrucker und Scanner16 Kommentare

Hallo, bislang versuchen wir es immer wieder mit Lexmark T650N. Habe da jetzt grad wieder einen sehr guten, wenig ...

Hardware
Ncomputing N600 oder auch 600W Privat nutzen Kostenlos oder kostengünstig
gelöst Frage von PlerTanixHardware15 Kommentare

Hallo liebe Forum User, Ich habe da eine Frage. Ich bin Azubi im dritten Lehrjahr und bei uns in ...