
131071
04.10.2016, aktualisiert um 16:38:40 Uhr
Nach Domain Change Pfade anpassen
Hallo zusammen
Wir haben mehrere Unternehmen bzw. Domains zusammengeführt und haben nun das Problem, dass gewisse verknüpfte Elemente (Bilder in Word Docs) nicht mehr angezeigt werden, da diese Dateien im SYSVOL der alten Domain gespeichert wurden.
In den Word Docs ist z.B. ein Bild gespeichert, dessen Pfad lautet: \\alteDomain.local\SYSVOL\alteDomain.local\Bilder
Nun gibt es ja diese alteDomain.local nicht mehr und folglich kann das Bild nicht mehr dargestellt werden.
Ich sehe eigentlich zwei mögliche Ansätze:
1) Ich erstelle einen DNS Eintrag alteDomain.local, der auf irgend eine Freigabe auf unserem Fileserver zeigt mit dem obigen Pfad, so dass die Bilder in der Theorie wieder angezeigt werden sollten (leider scheitere ich im Moment daran, da auch ein CNAME Eintrag nicht mit einem Punkt erstellt werden kann (alteDomain.local)
2) Ich ändere die Pfade mit einem Powershell oder VBA Script
Hat mir irgend jemand Tipps zu meinen Ideen oder sieht er womöglich eine einfachere Lösung anstelle alle Dokumenten von Hand zu ändern?
Besten Dank im Voraus für die Rückmeldungen!
Wir haben mehrere Unternehmen bzw. Domains zusammengeführt und haben nun das Problem, dass gewisse verknüpfte Elemente (Bilder in Word Docs) nicht mehr angezeigt werden, da diese Dateien im SYSVOL der alten Domain gespeichert wurden.
In den Word Docs ist z.B. ein Bild gespeichert, dessen Pfad lautet: \\alteDomain.local\SYSVOL\alteDomain.local\Bilder
Nun gibt es ja diese alteDomain.local nicht mehr und folglich kann das Bild nicht mehr dargestellt werden.
Ich sehe eigentlich zwei mögliche Ansätze:
1) Ich erstelle einen DNS Eintrag alteDomain.local, der auf irgend eine Freigabe auf unserem Fileserver zeigt mit dem obigen Pfad, so dass die Bilder in der Theorie wieder angezeigt werden sollten (leider scheitere ich im Moment daran, da auch ein CNAME Eintrag nicht mit einem Punkt erstellt werden kann (alteDomain.local)
2) Ich ändere die Pfade mit einem Powershell oder VBA Script
Hat mir irgend jemand Tipps zu meinen Ideen oder sieht er womöglich eine einfachere Lösung anstelle alle Dokumenten von Hand zu ändern?
Besten Dank im Voraus für die Rückmeldungen!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 316840
Url: https://administrator.de/forum/nach-domain-change-pfade-anpassen-316840.html
Ausgedruckt am: 28.04.2025 um 20:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo dmncng.
Habe ich hier schon diverse Skripte sowohl für Word- als auch Excel-Dokumente gepostet welche genau das machen:
Es macht also immer erst mal Sinn unsere Suchfunktion zu nutzen!
Grüße Uwe
Habe ich hier schon diverse Skripte sowohl für Word- als auch Excel-Dokumente gepostet welche genau das machen:
- Pfad der Dokumentenvorlage mit einem Powershell Script ändern?
- Excel 2010 - Kontaktaufnahme
- Alte Server Verknüpfung bei Clients löschen
- Office 2010, Word Verknüpfte Vorlage per VBA entfernen
Es macht also immer erst mal Sinn unsere Suchfunktion zu nutzen!
Grüße Uwe

Moin

R.
wie ich das ganze angehen kann mit dem Anpassen des Scripts?
Wie wär's erst mal mit ausführlichem "Lesen" der Posts ? R.
Ich würde das per Powershell machen wie ich es in den Links für die Excel-Files gezeigt habe. Minimal für Word abzuändern um den alten Servernamen in verlinkten Dateien im Dokument auszutauschen:
Ohne Gewähr, da ich hier nicht für alle Verlinkungsfälle Testdateien habe.
Verarbeitet werden nur *.docx und *.docm Dateien, keine Dateien im alten binären *.doc Format, für dieses siehe VBA Skript weiter unten.
Für die binären Formate *.doc hier das VBA Skript:
Für mehr Wünsche, PM dann kann ich dir ein Angebot für eine Anpassung machen.
Grüße Uwe
Ohne Gewähr, da ich hier nicht für alle Verlinkungsfälle Testdateien habe.
Verarbeitet werden nur *.docx und *.docm Dateien, keine Dateien im alten binären *.doc Format, für dieses siehe VBA Skript weiter unten.
# --- Variablen ---------------------------
# Alter und neuer Servername angeben
$serverold = "\\oldserver"
$servernew = "\\newserver"
# Ordner der *.docx und *.docm Dateien enthält und rekursiv verarbeitet wird
$folder = "D:\word-dateien"
# --------------------------------------
# Benötigt wird mindestens NET-Framework 4.5 und Powershell 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# benötigte Assemblies laden
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.Filesystem
gci "$folder\*" -Include '*.docx','*.docm' -File -Recurse | %{
# Excel File als ZIP-Datei im Update-Modus öffnen
$zipfile = [System.IO.Compression.ZipFile]::Open($_.FullName,[System.IO.Compression.ZipArchiveMode]::Update)
# Einträge der benötigte Dateien aus dem Dokument holen
$entries = $zipfile.Entries | ?{$_.FullName -match '^word/_rels/.*?\.rels$'}
$remove = @()
$entries | %{
$tmp = "$env:TEMP\$($_.Name)"
if (Test-Path $tmp){del $tmp -Force -ErrorAction SilentlyContinue}
# file entry extrahieren
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$tmp)
$content = gc $tmp
if ($content -match [regex]::Escape($serverold)){
# Einträge ersetzen
$content -replace [regex]::Escape($serverold),$servernew | Set-Content $tmp -Encoding UTF8
# geänderte Datei wieder hinzufügen
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipfile,$tmp,$_.FullName) | out-null
$remove += $_
}
# Temporäre Files löschen
del $tmp -Force -ErrorAction SilentlyContinue
}
# lösche ersetzte Dokumentteile im ZIP
$remove | %{$_.Delete()}
#>
# Zipfile-Resourcen freigeben
$zipfile.Dispose()
}
Für die binären Formate *.doc hier das VBA Skript:
'Pfad zu den Dokumenten
Const strPathDocs = "D:\Daten"
'Logfile für eventuell auftretende Fehler
Const strPathLogfile = "D:\Daten\logfile.txt"
'Alter Servername
Const strOldServer = "\\SERVEROLD"
'Neuer Servername
Const strNewServer = "\\SERVERNEW"
If MsgBox("Wollen sie nun alle Word-Dokumente unterhalb von '" & strPathDocs & "' verarbeiten und die Stapelverarbeitung starten?",vbQuestion Or vbYesNo) = vbNo Then
WScript.Quit
End If
'Objekte erstellen
Set fso = CreateObject("Scripting.Filesystemobject")
Set objWord = WScript.CreateObject("Word.Application")
'Wenn das ganze unsichtbar ablaufen soll nächste Zeile auf false setzen
objWord.Visible = True
objWord.DisplayAlerts = False
On Error Resume Next
'Im Ordner Rekursiv alle Word-Dokumente verarbeiten
parseFolders fso.GetFolder(strPathDocs), True
objWord.DisplayAlerts = True
objWord.Quit True
MsgBox "Vorgang abgeschlossen.",vbInformation
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
For Each file In fldr.Files
'Verarbeite nur Dateien mit den Endungen *.doc, *.docx, *.docm
If LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 4)) = "docx" Or LCase(Right(file.Name, 4)) = "docm" Then
doc_changed = False
Set objDoc = objWord.Documents.Open(file.Path)
If Err.Number <> 0 Then
'Wenn Fehler beim Öffnen des Dokuments aufgetreten ist notiere das im Logfile
Set objLog = fso.OpenTextFile(strPathLogfile,8,True)
objLog.WriteLine("Fehler beim öffnen der Datei: -> " & file.Path)
objLog.Close
Err.Clear
Else
With objDoc
' Dokumentvorlage überprüfen und ersetzen
Set dlgTemplate = objWord.Dialogs(87)
If InStr(1,dlgTemplate.Template,strOldServer,1) Then
' neuen Templatepfad erstellen
newTemplate = Replace(dlgTemplate.Template,strOldServer,strNewServer,1,1,1)
' Alle alten Vorlageninformationen entfernen
.RemoveDocumentInformation (9)
' Neue Vorlage zuweisen
.AttachedTemplate = newTemplate
doc_changed = True
End If
' Verknüpfungen im Dokument überprüfen und ersetzen
For Each story In .StoryRanges
For Each shape In story.InlineShapes
If Not shape.LinkFormat Is Nothing Then
strFullPath = shape.LinkFormat.SourceFullName
If InStr(1, strFullPath, strOldServer, 1) Then
shape.LinkFormat.SourceFullName = Replace(strFullPath, strOldServer, strNewServer, 1, -1, 1)
doc_changed = True
End If
End If
Next
Next
'Wurden Änderungen vorgenommen Dokument speichern ansonsten ungespeichert schließen
If doc_changed Then
' Dokument speichern
.Save
.Close True
Else
.Close False
End If
End With
End if
End If
Next
If boolRecursion Then
For Each subFolder in fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Grüße Uwe