kaepsele
Goto Top

Pfad in Verknüfung (.INK) anpassen

Hallo liebe Forenmitglieder,

ich hoffe, dass ich hier mit meiner Frage (VBS) richtig bin?

Folgende Situation:
Auf PC1 läuft eine Software, die von anderen PCs, über ein verbundenes Netzlaufwerk, über die Verknüpfung zur .exe aufgerufen wird.

Der Pfad in der Verknüpfung sieht z.B. so aus:

Ziel: "N:\Programmordner\Programm.exe User1" (User1 wird als Argument übergeben)
Ausführen in: "N:\Programmordner\"

Durch Windows 10 Updates wird jetzt dieser Pfad in einen UNC-Pfad umgewandelt ("\\PC1\Ordner1\Programmordner\Programm.exe User1"), womit jedoch die Software nicht mehr klarkommt und nicht mehr starten kann.

Mein Ziel ist es nun ein Script oder ähnliches zu haben, dass nachschaut, ob der Pfad in der Verknüpfung auf dem Desktop vom absoluten Pfad in einen relativen Pfad umgewandelt wurde und dies dann ggfls. wieder rückgängig macht.

Leider ist der Laufwerksbuchstabe nicht immer "N:" sondern kann auch "T:" sein. Kann man dies in die Prüfung auch noch einbauen, dass geprüft wird, welcher Laufwerksbuchstabe verbunden ist und dieser dann auch für den neuen (ursprünglichen) Pfad genommen wird?

Wäre jemand so nett, mir hier Hilfestellung zu leisten?

Dankeschön!

Käpsele

Content-Key: 369063

Url: https://administrator.de/contentid/369063

Printed on: May 2, 2024 at 03:05 o'clock

Mitglied: 135799
Solution 135799 Mar 23, 2018 updated at 14:24:01 (UTC)
Goto Top
Ich würd's zwar per GPO schneller und leichter realisieren, aber wer's unbedingt umständlich mag bitte ...
Set objShell = CreateObject("Wscript.Shell")  
Set fso = CreateObject("Scripting.FileSystemObject")  
' Pfad zum Shortcut  
strPathShortcut = objShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\myshortcut.lnk"  
' mögliche Laufwerke  
arrDrives = Array("N:\","T:\")  
' Pfad zum Programm (ohne Laufwerksangabe)  
strSubpath = "Programmordner\Programm.exe"  
'Wenn Shortcut existiert  
If fso.FileExists(strPathShortcut) Then
    ' erstelle Shortcutobjekt  
    Set lnk = objShell.CreateShortcut(strPathShortcut)
    ' Wenn Ziel kein UNC-Pfad ist beende Skript  
    If Left(lnk.TargetPath,2) <> "\\" Then WScript.Quit  
    ' Prüfe ob Programm unter den Laufwerken zu finden ist  
	For Each drive In arrDrives
        ' Wenn Programmdatei existiert ersetze den Zielpfad der Verknüpfung   
		If fso.FileExists(drive & strSubpath) Then
			lnk.TargetPath = drive & strSubpath
			Exit For
		End If
	Next
    ' speichere den Link  
    lnk.Save
End If
Schnuffi

Tippfehler bereinigt ...
Member: Kaepsele
Kaepsele Mar 23, 2018 at 14:58:44 (UTC)
Goto Top
Hallo Schnuffi,

du bist große Klasse!

Danke!!

Wenn das Problem ohne Domäne mit GPO schneller und leichter zu lösen ist, dann freue ich mich über eine einfachere Lösung?

Alternativ ist mir noch aufgefallen, dass der Name der Verknüpfung nicht immer der selbe ist.
Kann man die richtige Verknüpfung auch über die auszuführende .exe im Pfad herausfinden? Also über den Namen "Programm.exe" im Pfad?

Falls das zu kompliziert ist, bin ich mit der jetzigen Lösung schon super glücklich!

Vielen Dank!
Grüß
Käpsele
Mitglied: 135799
135799 Mar 23, 2018 updated at 15:46:14 (UTC)
Goto Top
Set objShell = CreateObject("Wscript.Shell")  
Set fso = CreateObject("Scripting.FileSystemObject")  
' mögliche Laufwerke  
arrDrives = Array("N:\","T:\")  
' Pfad zum Programm (ohne Laufwerksangabe)  
strSubpath = "Programmordner\Programm.exe"  
strDesktop = objShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop"  
strPathShortcut = ""  
set lnk = Nothing
'Suche Shortcut  
For Each file In fso.GetFolder(strDesktop).Files
	If LCase(fso.GetExtensionName(file.Name)) = "lnk" Then  
	    ' erstelle Shortcutobjekt  
    	    Set lnk = objShell.CreateShortcut(file.Path)
    	    ' Wenn Programmname in Targetpath  
        	If InStr(1,LCase(lnk.TargetPath),LCase(strSubpath),1) > 0 Then
    		' Pfad zum Shortcut  
		strPathShortcut = file.Path
    		Exit For
        	End If
	End If
Next

'Wenn Shortcut existiert  
If strPathShortcut <> "" Then  
    ' Wenn Ziel kein UNC-Pfad ist beende Skript  
    If Left(lnk.TargetPath,2) <> "\\" Then WScript.Quit  
    ' Prüfe ob Programm unter den Laufwerken zu finden ist  
	For Each drive In arrDrives
        ' Wenn Programmdatei existiert ersetze den Zielpfad der Verknüpfung   
		If fso.FileExists(drive & strSubpath) Then
			lnk.TargetPath = drive & strSubpath
			Exit For
		End If
	Next
    ' speichere den Link  
    lnk.Save
End If
Member: Kaepsele
Kaepsele Mar 23, 2018 at 15:58:41 (UTC)
Goto Top
...ganz großes Kino!

Danke! Danke!

Kann es heute leider nicht mehr testen, melde mich aber spätestens anfang nächster Woche zurück...

Ein schönes Wochenende wünscht dir
Käpsele
Member: Kaepsele
Kaepsele Mar 27, 2018 at 08:05:02 (UTC)
Goto Top
Habe es nun testen können und bin begeistert!

Danke für die Mühe und Hilfe, es funktioniert hervorragend!

Käpsele
Mitglied: 135799
135799 Mar 27, 2018 at 08:07:48 (UTC)
Goto Top
Zitat von @Kaepsele:
Bischt halt a Käpsele face-smile.