Bitte um Ideen für ein Script zum Bereinigen von Verknüpfungen
Hintergrund:
In unserem Unternehmen wurden einige Fileserver umgezogen. Technisch gesehen, befinden sich nun alle Dateien auf einem anderen Server. Somit würden die Verknüpfungen die auf diese Dateien verweisen nicht mehr funktionieren. Da wir dies vermeiden wollen, haben wir das Problem vorläufig mit einer "Umleitung" behoben.
Diese Lösung soll aber nur für den Übergang sein. Deshalb habe ich ein Script geschrieben, welches alle Verknüpfungen in einem angegebenen Ordner und deren Unterordner bereinigen soll. Hierfür werden die zu ändernden Zielpfade und die neuen Pfade aus einer Textdatei ausgelesen. In der Textdatei sind alle Ordner der ersten Ebene enthalten. (Siehe Beispiel)
Dies soll nur ein Beispiel zur Veranschaulichung sein. Letztendlich soll der Zielpfad einer Verknüpfung angepasst werden, sofern dieser einen String der linken Spalte enthält. Wenn dem so ist, wird der Zielpfad der rechten Spalte verwendet.
Problem:
Das Script ist fertig gestellt und funktioniert.
Leider ist es nur so, dass in vielen Verknüpfungen (ca. 80%) der Laufwerksbuchstabe enthalten ist und nicht der vollständige Serverpfad.
Beispiel:
Statt \\altserver1\Ordner1\Mustermann\Doku.doc
S:\Mustermann\Doku.doc
Somit wird diese Verknüpfung in meinem Script nicht berücksichtigt.
Lösungsversuch:
Mit dem Notepad++ kann man die lnk-Datei auslesen. Dort steht der vollständige Serverpfad auch drin. (Siehe Anhang) Wenn ich die Möglichkeit hätte die lnk Dateien mit vbs auszulesen, wäre das Problem gelöst. Doch leider ist mir dies nicht möglich. Ich bekomme immer nur "L" zurück. (Siehe Quellcode)
Für Ideen bin ich sehr dankbar.
Viele Grüße
Caradh
In unserem Unternehmen wurden einige Fileserver umgezogen. Technisch gesehen, befinden sich nun alle Dateien auf einem anderen Server. Somit würden die Verknüpfungen die auf diese Dateien verweisen nicht mehr funktionieren. Da wir dies vermeiden wollen, haben wir das Problem vorläufig mit einer "Umleitung" behoben.
Diese Lösung soll aber nur für den Übergang sein. Deshalb habe ich ein Script geschrieben, welches alle Verknüpfungen in einem angegebenen Ordner und deren Unterordner bereinigen soll. Hierfür werden die zu ändernden Zielpfade und die neuen Pfade aus einer Textdatei ausgelesen. In der Textdatei sind alle Ordner der ersten Ebene enthalten. (Siehe Beispiel)
\\altserver1\Ordner1 \\neuserver\data\Alt1\Ordner1
\\altserver1\Ordner2 \\neuserver\data\Alt1\Ordner2
\\altserver1\Ordner3 \\neuserver\data\Alt1\Ordner3
\\altserver2\Ordner1 \\neuserver\data\Alt2\Ordner1
\\altserver2\Ordner6 \\neuserver\data\Alt2\Ordner6
Problem:
Das Script ist fertig gestellt und funktioniert.
Leider ist es nur so, dass in vielen Verknüpfungen (ca. 80%) der Laufwerksbuchstabe enthalten ist und nicht der vollständige Serverpfad.
Beispiel:
Statt \\altserver1\Ordner1\Mustermann\Doku.doc
S:\Mustermann\Doku.doc
Somit wird diese Verknüpfung in meinem Script nicht berücksichtigt.
Lösungsversuch:
Mit dem Notepad++ kann man die lnk-Datei auslesen. Dort steht der vollständige Serverpfad auch drin. (Siehe Anhang) Wenn ich die Möglichkeit hätte die lnk Dateien mit vbs auszulesen, wäre das Problem gelöst. Doch leider ist mir dies nicht möglich. Ich bekomme immer nur "L" zurück. (Siehe Quellcode)
Private Sub readShortcutFile()
Dim fso,f, line, strPath
strPath = "C:\Test\Test.doc.lnk"
Const ForReading = 1
set fso = CreateObject ("Scripting.FileSystemObject")
set f = fso.opentextfile(strPath,ForReading,true)
do while not f.AtEndOfStream
line = f.readLine()
MsgBox line
loop
End Sub
Für Ideen bin ich sehr dankbar.
Viele Grüße
Caradh
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132768
Url: https://administrator.de/contentid/132768
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
17 Kommentare
Neuester Kommentar
.lnk Dateien sind binäre Dateien und ein textbasierter Reader wie FileSystemObject wird deshalb immer beim ersten NUL-Zeichen abbrechen (NUL = Hier nach kommt nix mehr).
http://blogs.msdn.com/ericlippert/archive/2005/04/20/binary-files-and-t ...
http://www.motobit.com/tips/detpg_read-write-binary-files/
Grüße
Max
http://blogs.msdn.com/ericlippert/archive/2005/04/20/binary-files-and-t ...
http://www.motobit.com/tips/detpg_read-write-binary-files/
Grüße
Max
Hallo Caradh und willkommen im Forum!
Das Auslesen von Verknüpfungen hatten wir mal hier (siehe Zeile 19) ...
Noch eine Anmerkung zu
Grüße
bastla
Das Auslesen von Verknüpfungen hatten wir mal hier (siehe Zeile 19) ...
Noch eine Anmerkung zu
Leider ist es nur so, dass in vielen Verknüpfungen (ca. 80%) der Laufwerksbuchstabe enthalten ist und nicht der vollständige Serverpfad.
Das "Leider" ist eigentlich nicht ganz nachvollziehbar - wenn die Freigabe auf einen Laufwerksbuchstaben gemapt wurde, muss ja nur diese Zuweisung angepasst werden und der Link funktioniert weiterhin ...Grüße
bastla
Hallo!
Du könntest die Vollen Pfade z-B. so feststellen. Musst sie dann nur noch ersetzen.
Set oShell = WScript.CreateObject("WScript.Shell")
Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
FullPath = ofso.getparentfoldername(wscript.scriptfullname)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection",,48)
Set objNetwork = WScript.CreateObject("WScript.Network")
For Each item in colitems
LWName = LWName & item.localname & "|"
LWPath = lwpath & item.RemotePath & "|"
Next
arrLWPath = Split(lwpath, "|")
arrLWName = Split(lwname, "|")
MsgBox "Fertig"
Grüße
Mayho
Du könntest die Vollen Pfade z-B. so feststellen. Musst sie dann nur noch ersetzen.
Set oShell = WScript.CreateObject("WScript.Shell")
Set oFso = WScript.CreateObject("Scripting.FileSystemObject")
FullPath = ofso.getparentfoldername(wscript.scriptfullname)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection",,48)
Set objNetwork = WScript.CreateObject("WScript.Network")
For Each item in colitems
LWName = LWName & item.localname & "|"
LWPath = lwpath & item.RemotePath & "|"
Next
arrLWPath = Split(lwpath, "|")
arrLWName = Split(lwname, "|")
MsgBox "Fertig"
Grüße
Mayho
@bakero3010
zu einfach ist ...
Grüße
bastla
... als kA octetstream oder etwas ähnlichem ...
Wenn die im oben von mir verlinkten Beitrag dargestellte Vorgangsweise nach dem SchemaSet objShell= WScript.CreateObject("Wscript.Shell")
Set objShortcut = objShell.CreateShortcut("C:\Test\Test.doc.lnk")
WScript.Echo objShortcut.TargetPath
Grüße
bastla
@mayho33
Grüße
bastla
Dein Script in dem Link ist super!!.
Danke für die Blumen - allerdings würde ich das heute etwas anders schreiben (und zumindest die Methoden "GetBaseName
" und "GetExtensionName
" verwenden) ...Grüße
bastla
Hallo Caradh!
Grüße
bastla
Selbst wenn ich die Zuweisung anpasse, hat sich die Verknüpfung immer noch die alte Herkunft gemerkt. In diesem Fall würde das Betriebssystem automatisch ein neue Netzwerkverbindung anlegen und den Laufwerksbuchstaben im TargetPath entsprechend anpassen.
Kann ich nicht nachvollziehen - wenn die Verknüpfung auf "S:\Dein Doument.doc" zeigt und "S:" auf "\\altserver1\Ordner3" gemapt ist, funktioniert die Verknüpfung bei mir weiterhin, wenn zwischenzeitlich "S:" mit "\\neuserver\data\Alt1\Ordner3" (getestet natürlich mit anderen Rechnernamen / Pfaden) verbunden wird (obwohl in der Verknüpfung der ursprüngliche UNC-Pfad gespeichert ist) - oder verstehe ich Dich falsch?Grüße
bastla
Hallo Caradh!
Welches BS verwendest Du? Bei mir liegt die Verknüpfung auf einem XP Pro SP3 und es wird nach dem Neuverbinden des Laufwerkes auf die andere Freigabe zugegriffen - lediglich nach einem Umbenennen/Löschen der Datei am neuen Ort wird tatsächlich die Verknüpfung wieder auf den alten Speicherort "umgebogen" (und entsprechend in der .lnk-Datei auch gespeichert) ...
Grüße
bastla
Welches BS verwendest Du? Bei mir liegt die Verknüpfung auf einem XP Pro SP3 und es wird nach dem Neuverbinden des Laufwerkes auf die andere Freigabe zugegriffen - lediglich nach einem Umbenennen/Löschen der Datei am neuen Ort wird tatsächlich die Verknüpfung wieder auf den alten Speicherort "umgebogen" (und entsprechend in der .lnk-Datei auch gespeichert) ...
Grüße
bastla