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
GELÖST

Verknüpfung auf ungültiges Ziel erstellen

Frage Microsoft

Mitglied: Bodenseehost

Bodenseehost (Level 1) - Jetzt verbinden

20.06.2011, aktualisiert 11:17 Uhr, 8288 Aufrufe, 16 Kommentare

Pfade von Verknüpfungen sollen "bewusst" auf einen falschen/ungültigen Pfad abgeändert werden, dies verhindert Windows aber.

In Unserem Netzwerk stellen wir den Usern angepasste Desktop- und Startmenüverknüpfungen zur Verfügung. Die Verknüpfungen werden aus gegebenem Anlass quasi aus einem Share in das jeweilige Profil kopiert.
Wie kann ich die Vorlagen in dem Share bearbeiten, ohne die Verknüpfungen auf dem jeweiligen Bearbeitungs-PC gültig machen zu müssen???

Das Problem ist ja, wenn ich eine Verknüpfung über die Eigenschaften öffne und bearbeite, wird überprüft, ob der Pfad stimmt und das verknüpfte File auch wirklich dort liegt. Ist dies nicht der Fall, wird das Speichern/Schließen der Verknüpfungseigenschaften verhindert.

Da aber nicht jedes Programm auf jedem Client installiert ist, kann ich einige Verknüpfungen nicht bearbeiten - Hinweis auf einen "ungültigen Pfad".

Kann man die Überprüfung der Pfadgültigkeit abschalten?
Oder gibts ein einfaches Tool, um die Verknüpfungsinhalte bewusst auf ungültige Pfade anzupassen?
Mitglied: Friemler
20.06.2011 um 12:07 Uhr
Hallo Bodenseehost,

ja, es gibt ein "Tool": VBScript

01.
Set objShell    = WScript.CreateObject("WScript.Shell") 
02.
Set objShortcut = objShell.CreateShortcut(WScript.Arguments(0)) 
03.
 
04.
objShortcut.TargetPath = WScript.Arguments(1) 
05.
objShortcut.Save
Das Script z.B. als ChgLNK.vbs speichern und dann so aufrufen:
cscript /nologo ChgLNK.vbs "Verknüpfung.lnk" "NeuesZiel"
Weitere Eigenschaften einer Verknüpfung:
01.
objShortcut.WindowStyle 
02.
objShortcut.Hotkey 
03.
objShortcut.IconLocation 
04.
objShortcut.Description 
05.
objShortcut.WorkingDirectory

Gruß
Friemler
Bitte warten ..
Mitglied: Bodenseehost
20.06.2011 um 12:16 Uhr
Hm... ja ok... klar.
Mit Kix hätt ich das auch hinbekommen sollen. Das als Argument im Aufruf mitzugeben macht es aber wieder schick *g*.

Bei der Anzahl der immer wieder zu bearbeitetenden .lnk's hätte ich das natürlich gerne per Maus+Desktop gemacht. Rechtsklick-Eigenschaften würde mir besser gefallen, aber so gehts auch.
Danke für Deinen Tipp!

Wenn man nur irgendwie die Pfadüberprüfung abschalten könnte?!
Bitte warten ..
Mitglied: Friemler
20.06.2011 um 12:24 Uhr
Falls Du mehrere Verknüpfungen auf das gleiche Ziel ändern willst, könntest Du das neue Ziel im Quelltext festlegen. Dann kannst Du die Icons der zu ändernden Verknüpfungen nacheinander auf das Icon des VBScripts ziehen.

Im Explorer die Pfadüberprüfung abschalten wird sich wohl nicht machen lassen.

Grüße
Bitte warten ..
Mitglied: Friemler
20.06.2011 um 12:55 Uhr
Eine GUI-Lösung:

01.
Set objFSO   = CreateObject("Scripting.FileSystemObject") 
02.
Set objShell = CreateObject("WScript.Shell") 
03.
 
04.
strTarget = InputBox("Neues Ziel der Verknüpfung:") 
05.
 
06.
If strTarget <> "" Then 
07.
  Set objShortcut              = objShell.CreateShortcut(WScript.Arguments(0)) 
08.
  objShortcut.TargetPath       = strTarget 
09.
  objShortcut.WorkingDirectory = objFSO.GetParentFolderName(strTarget) 
10.
  objShortcut.Save 
11.
End If
Das Icon der Verknüpfung auf das Icon des VBScripts ziehen.

Gruß
Friemler
Bitte warten ..
Mitglied: Bodenseehost
20.06.2011 um 14:10 Uhr
Kuhl... Danke!
Ich glaube ich muss doch mehr mit VBS machen :-P
Bitte warten ..
Mitglied: evinben
01.01.2012 um 18:41 Uhr
Gesundes neues Jahr allen!

Hallo Friemler,

wie soll der Script sein, wenn zur einen bestehenden Verknüpfung ein Kommentar hinzugefügt werden soll (da die restlichen bestehenden Eigenschaften nicht überschrieben werden dürfen)?

Mein Versuch war wie folgt:
01.
Set objShell=WScript.CreateObject("Wscript.Shell") 
02.
Set objShortcut=objShell.CreateShortcut("%ProgramData%\Microsoft\Windows\Start Menu\Programs\%NewLinkName%") 
03.
objShortcut.Description="%Beschreibung(Kommentar)%" 
04.
objShortcut.Save
Dieser Code-Aufbau funktioniert nur dann, wenn zusätzlich eine Befehlszeile mit dem Pfad zu der exe-Datei mit angegeben wird. Dannn wird aber eine vollständig neue Verknüpfung angelegt. In meinem Fall ist dies nicht erwünscht, da das Ziel (die Eigenschaft: Pfad zur exe-Datei) bei der Installation der Anwendung variiert werden kann – je nach Version. Somit möchte ich erreichen, dass die Kommentar-Eigenschaft der Verknüpfung bei Bedarf benutzerdefiniert gesetzt wird, aber ihre restlichen Eigenschaften unverändert bleiben.

Danke.
Bitte warten ..
Mitglied: Friemler
01.01.2012 um 20:26 Uhr
Hallo evinben,

auch Dir ein frohes Neues.

Meine Idee zu Deinem Problem wäre, alle interessierenden Eigenschaften auszulesen und ergänzt um den Kommentar wieder in den Shortcut zu schreiben.

Viel Glück
Friemler
Bitte warten ..
Mitglied: evinben
02.01.2012 um 11:32 Uhr
Hallo Frimler,

den Code habe ich von Bastla. Die Eigenschaften auszulesen schaffe ich daher nicht, da ich mit VB nicht vertraut bin. Den bestehenden Code wollte ich nur umändern/ergänzen.

?

Danke für den Glück.
Evin
Bitte warten ..
Mitglied: Friemler
02.01.2012 um 13:19 Uhr
Hallo evinben,

ich habe gerade bei mir einen kleinen Test durchgeführt. Mit folgendem Code konnte ich nur den Kommentar einer Verknüpfung neu setzen:

01.
If WScript.Arguments.Count = 2 Then 
02.
  Set objShell            = CreateObject("WScript.Shell") 
03.
  Set objShortcut         = objShell.CreateShortcut(WScript.Arguments(0)) 
04.
  objShortcut.Description = WScript.Arguments(1) 
05.
  objShortcut.Save 
06.
End If
Den Code z.B. als ChngComment.vbs speichern und dann folgendermaßen aufrufen:

cscript /nologo ChngComment.vbs "PfadZurVerknüpfung.lnk" "Neuer Kommentar"
Beim Pfad zur Verknüpfung muss die Dateierweiterung .lnk mit angegeben werden.

Die Methode CreateShortcut erzeugt keine neuen Verknüpfungen (der Name ist missverständlich). Die Methode erzeugt ein Objekt, über das auf die Eigenschaften einer Verknüpfung (auch lesend) zugegriffen werden kann. Geänderte/neue Eigenschaften müssen mit der Methode Save gespeichert werden (Zeile 5). Wenn die Verknüpfungsdatei noch garnicht existiert, wird sie erst dann erstellt.

Um VBS zu lernen: Google mal nach script56.chm (englische Version von MS) oder lade Dir von hier die (teilweise) deutsche Version.

Gruß
Friemler
Bitte warten ..
Mitglied: evinben
02.01.2012 um 22:07 Uhr
Hallo Friemler,

es klappt!
Die Methode CreateShortcut erzeugt keine neuen Verknüpfungen (der Name ist missverständlich).
Wieder einiges dazu gelernt.

Ich freue mich, dass ich nicht aus diesem Grund darauf hingewiesen wurde, dass „diese Methode eben wie schon ihr Name sagt die Aufgabe hat eine vollständig neue Verknüpfung zu erzeugen und nichts anders“.
Etwas Hoffnung ist daher im Leben wichtig und es funktioniert.


Danke sehr für den Tipp mit dem VB-Lehrstoff "script56.chm".Dies werde ich mir ernst nehmen. Von meinem dicken VB-Buch im Regal scheue ich mich noch.

Gruß
evinben
Bitte warten ..
Mitglied: Knuefi
14.11.2015 um 22:21 Uhr
Hallo Friemler,
kannst du mir bitte weiter Helfen?. Ich versuche ein VBScripts zu erstellen, mit dem ich eine Verknüfung eines Ordner erstellen kann. Schön wäre, wenn ich das Icon des Scipts auf den Ordner ziehe und die Verknüfung wird an den vorgegebenen Ort erstellt. Zudem soll die Eingabe des Namen der Verknüfungen mölich sein.
Gruß
Bitte warten ..
Mitglied: evinben
15.11.2015, aktualisiert um 20:36 Uhr
Hallo Knuefi

willkommen in diesem Beitrag.

Gestern war ich spät Abend zu müde, um dir gleich mit einer Lösung zu antworten und jetzt habe ich die Gelegenheit gefunden für dich etwas aus den obigen Schnipseln von Friemler was zusammenzustellen.
Bei mir funktioniert es problemlos und wenn's was gibt, melde dich gerne und hoffe dein Anliegen soweit korrekt verstanden zu haben.

Schön wäre, wenn ich das Icon des Scipts auf den Ordner ziehe und die Verknüfung wird an den vorgegebenen Ort erstellt.
Du sollst allerdings andersrum vorgehen (den Ordner auf das Skript ziehen)

Gruß
Nik

01.
'Wenn das Skript ohne Argument ausgeführt wird, abbrechen 
02.
If WScript.Arguments.Count < 1 Then WScript.Quit 
03.
 
04.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
05.
Set objShell = CreateObject("WScript.Shell") 
06.
 
07.
'Ziehl der Verknüpfung abfragen 
08.
strTarget = InputBox("Neues Ziel der Verknüpfung:") 
09.
 
10.
If strTarget <> "" Then 
11.
  Set objShortcut              = objShell.CreateShortcut(WScript.Arguments(0) & ".lnk") 
12.
   
13.
  'Kommentar/Beschreibung setzen 
14.
  'objShortcut.Description = WScript.Arguments(1) 
15.
 
16.
  'Ziehl der Verknüpfung setzen 
17.
  objShortcut.TargetPath       = strTarget 
18.
 
19.
  'Abreitsverzeichnis setzen 
20.
  objShortcut.WorkingDirectory = objFSO.GetParentFolderName(strTarget) 
21.
 
22.
  objShortcut.Save 
23.
End If
Bitte warten ..
Mitglied: Friemler
15.11.2015, aktualisiert um 19:08 Uhr
Hallo Knuefi, hallo Nik,

ich hatte auch noch was anderes zu tun, deshalb erst jetzt mein Vorschlag. Wie meistens etwas länger als der Code der "Konkurenz" , aber ausführlich kommentiert und komplett ausprogrammiert mit Fehlerhandling usw.:

01.
'Alle Variablen müssen vor ihrer Verwendung deklariert werden 
02.
Option Explicit 
03.
 
04.
 
05.
'Konstanten zur Konfiguration der Verknüpfung 
06.
Const cWindowStyleShowNormal    = 1 
07.
Const cWindowStyleShowMaximized = 3 
08.
Const cWindowStyleShowMinimized = 7 
09.
 
10.
'Speicherpfad für die Verknüpfungsdateien 
11.
Const cLinkStorageLocation = "C:\Users\<User>\Desktop" 
12.
 
13.
 
14.
'Variablendeklaration 
15.
Dim colArgs, objFSO, objShell, objShortcut 
16.
Dim strFolderPath, strLinkName 
17.
Dim strScriptDescription 
18.
Dim strMsgPromptForName 
19.
Dim strErrMsgNoArgs, strErrMsgDirNotExists, strErrMsgLinkNameInvalid  
20.
 
21.
 
22.
'Meldungs-Strings initialisieren 
23.
strScriptDescription     = "Verknüpfung erzeugen" 
24.
strMsgPromptForName      = "Geben Sie einen Namen für die Verknüpfung an." 
25.
strErrMsgNoArgs          = "Bitte übergeben Sie das Ziel der Verknüpfung" & vbCrLf & _ 
26.
                           "beim Aufruf dieses Scripts als Argument!" 
27.
strErrMsgDirNotExists    = "Das übergebene Verzeichnis existiert nicht!" 
28.
strErrMsgLinkNameInvalid = "Der eingegebene Name enthält ungültige Zeichen." & vbCrLf & _ 
29.
                           "Die Zeichen \/:*?""<>| dürfen nicht Bestandteil" & vbCrLf & _ 
30.
                           "des Namens sein." 
31.
 
32.
 
33.
'Argument-Collection holen 
34.
Set colArgs = WScript.Arguments 
35.
 
36.
'und prüfen, ob mindestens ein Argument übergeben wurde 
37.
If colArgs.Count = 0 Then 
38.
  ShowError strErrMsgNoArgs 
39.
  WScript.Quit 
40.
End If 
41.
 
42.
'Filesystem-Objekt erzeugen und den absoluten Pfad 
43.
'des übergebenen Verzeichnisses ermitteln 
44.
Set objFSO    = CreateObject("Scripting.FileSystemObject") 
45.
strFolderPath = objFSO.GetAbsolutePathName(colArgs(0)) 
46.
 
47.
'Prüfen, ob das übergebene Verzeichnis existiert 
48.
If Not objFSO.FolderExists(strFolderPath) Then 
49.
  ShowError strErrMsgDirNotExists 
50.
  WScript.Quit 
51.
End If 
52.
 
53.
'Name der Verknüpfung vom User einlesen 
54.
'Als Default-Wert wird der Name des Verzeichnisses eingetragen 
55.
strLinkName = InputBox(strMsgPromptForName, _ 
56.
                       strScriptDescription, _ 
57.
                       objFSO.GetFileName(strFolderPath) _ 
58.
59.
 
60.
'Prüfen, ob eine Eingabe gemacht wurde 
61.
'Wenn nicht, Abbruch 
62.
If strLinkName = "" Then 
63.
  WScript.Quit 
64.
End If 
65.
 
66.
'Prüfen, ob der Name ungültige Zeichen enthält 
67.
If ContainsIllegalChars(strLinkName) Then 
68.
  ShowError strErrMsgLinkNameInvalid 
69.
  WScript.Quit 
70.
End If 
71.
 
72.
'Jetzt können die Daten der Verknüpfung festgelegt werden 
73.
Set objShell    = WScript.CreateObject("WScript.Shell") 
74.
Set objShortcut = objShell.CreateShortcut(objFSO.BuildPath(cLinkStorageLocation, strLinkName & ".lnk")) 
75.
 
76.
objShortcut.TargetPath  = strFolderPath 
77.
objShortcut.WindowStyle = cWindowStyleShowNormal 
78.
 
79.
'Jetzt die Verknüpfungsdatei speichern 
80.
objShortcut.Save 
81.
 
82.
 
83.
 
84.
'Prüft, ob ein übergebener String bestimmte Zeichen enthält 
85.
Function ContainsIllegalChars(ByRef strAString) 
86.
  Dim objRegEx 
87.
   
88.
  Set objRegEx = New RegExp 
89.
   
90.
  objRegEx.IgnoreCase = True 
91.
  objRegEx.Global     = True 
92.
  objRegEx.Pattern    = "[\\/:\*\?""<>\|]" 
93.
   
94.
  ContainsIllegalChars = objRegEx.Test(strAString) 
95.
End Function 
96.
 
97.
 
98.
'Zeigt Dialogboxen mit Fehlermeldungen an 
99.
Sub ShowError(ByRef strMessage) 
100.
  MsgBox strMessage, _ 
101.
         vbCritical + vbOKOnly, _ 
102.
         strScriptDescription 
103.
End Sub
In Zeile 11 muss der Pfad zu dem Verzeichnis angegeben werden, in dem die erzeugten Verknüpfungen abgelegt werden sollen.

Das Icon des Scripts auf das Icon des Verzeichnisses ziehen, zu dem die Verknüpfung erstellt werden soll, funktioniert natürlich nicht, dadurch würde das Script in das Verzeichnis kopiert. Es geht nur umgekehrt.

Gruß
Friemler
Bitte warten ..
Mitglied: evinben
15.11.2015, aktualisiert um 21:07 Uhr
hey Friemler, extrem ordentlich .
ist es bei dir immer so überall zu Hause perfekt?

Den Code habe mir gleich archiviert (zu meiner Verknüpfungs-Sammlung eingefügt).
Wenn du schon sowieso dabei bist, vielleicht könntest du ihn leicht so erweitern, dass ebenso eine Fehlermeldung kommt (und zwar schon vor Eingabe des Ordner-Namens), falls der Pfad nicht stimmt (Speicherpfad für die Verknüpfungsdateien / Const cLinkStorageLocation) und eventuell ein Schalter (Option) für die Beschreibung/"Kommentar", dann haben alle zukünftige Leser gleich in Fülle servierte Lösung .

Einen schönen Abend
Nik
Bitte warten ..
Mitglied: Friemler
15.11.2015, aktualisiert um 21:52 Uhr
Hi Nik,

nur wenn man hohe Ansprüche hat (auch an sich selbst), kommt man dem Idealfall näher. Und nein, das wenigste von dem was ich mache, ist auch nur annähernd perfekt, bin ja auch nur ein Mensch.

Ich habe nur auf solche Aussagen wie "Geht auch mit diesen 5 Zeilen" oder "Ich nehme die Lösung von XY, weil sie kürzer ist" angespielt.

Bzgl. Deiner Erweiterungswünsche: Erst mal abwarten, was Knuefi dazu meint, das Script ist ja für ihn.

Und außerdem: Die besten Möglichkeiten, sich selbst zu verbessern (besonders beim programmieren), bieten sich einem, wenn man das verbessert, was andere gemacht haben...

Grüße
Friemler
Bitte warten ..
Mitglied: evinben
15.11.2015, aktualisiert um 21:44 Uhr
Und nein, das wenigste von dem was ich mache, ist auch nur annähernd perfekt, bin ja auch nur ein Mensch.
das beruhigt mich aber und macht dich zugleich sympathisch (keine Roboter, stimmt's?)
Alles richtig gesagt!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Userverwaltung
gelöst Gruppenrichtlinie Netzlaufwerk verbinden und direkt Verknüpfung darauf erstellen (11)

Frage von Lars1992 zum Thema Windows Userverwaltung ...

RedHat, CentOS, Fedora
gelöst Erstellen von Desktopverknüpfungen und Anpassung der Taskleiste (2)

Frage von honeybee zum Thema RedHat, CentOS, Fedora ...

Vmware
ESXI Template erstellen (2)

Frage von Phill93 zum Thema Vmware ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...