Symlinks unter Windows nutzen

Was für Linux selbstverständlich ist, muss für Windows Systemen (ab Windows Vista) erst vollständig aktiviert werden.

Was sind Symlinks?

Symlinks, oder Symbolische Links, sind der bekannten Datei Verknüpfung relativ ähnlich. Symlinks „verhalten“ sich aber so, als würde die Datei, oder der Ordner, sich an der Position des Symlinks befinden. Dies ermöglicht mehrere Anwendungsgebiete.

Welchen Nutzen haben Symlinks?

Ein Beispiel zur Nutzung der Symlinks kann im Umzug von Programmen sein.

Ich habe ein Programm -nennen wir es getpaid4it- unter C:\Programme installiert. Der ganze Pfad lautet dem zur Folge wie folgt:

C:\Programme\getpaid4it

Durch einige Programm-Updates habe ich aber keinen Platz mehr auf Laufwerk C: um dieses Programm selbst upzudaten. Auf der anderen Festplatte -z.B. Laufwerk D- hingegen habe ich aber noch massiv Platz. Jetzt kann man das Programm getpaid4it deinstallieren und auf Laufwerk D wieder installieren. Unter umständen kann das eine ganze weile dauern und auch die Konfigurationsdateien gehen verloren.

Wer sich den Ärger ersparen möchte könnte jetzt mit Symlinks arbeiten um sich die Deinstallation/Installation zu sparen. Hierzu kopiert man den Ordner der Installation getpaid4it an seinen neuen Bestimmungsort auf Laufwerk D. Der neue Pfad lautet dann wie folgt:

D:\Programme\getpaid4it

Jetzt kommen die Symlinks ins Spiel. Ich brauche ein Ordner-Symlink auf C:\Programme mit dem Namen getpaid4it, welcher zum neune Speicherort D:\Programme\getpiad4it führt. Ist dieser angelegt würde alles so laufen als wäre das Programm noch auf C:\Programme installiert.

Welche Symlink-Varianten gibt es?

Microsoft hält 4 unterschiedliche Symlink-Varianten parat.

  • lokal zu lokal
  • lokal zu remote
  • remote zu lokal
  • remote zu remote

lokal zu lokal

Unter „lokal zu lokal“ ist zu verstehen, dass man an einem Windows auf den lokalen Festplatten einen Symlink erstellt. Zum Beispiel C:\Programme\getpaid4it auf D:\Programme\getpaid4it.

Diese Variante ist in der Regel standardmäßig in Windows aktiviert.

lokal zu remote

Möchte man hingegen auf z. B. einem Netzwerklaufwerk versymlinken ist es „lokal zu remote“.

Auch diese Variante ist in der Regel Standardmäßig aktiv.

remote zu lokal

Hat man ein Netzlaufwerk und möchte hier einen Symlink auf die lokale Festplatte einrichten nennt man das „remote zu lokal“.

Diese Variante muss erst aktiviert werden, weil hier Microsoft ein Sicherheitsrisiko sieht.

remote zu remote

Zieht man Dateien/Programme von einem Netzlaufwerk auf ein anderes umziehen und der Zugriff kann nur Remote erfolgen, dann ist dieser Symlink ein „remote zu remote“ Symlink.

Auch diese Variante wird von Microsoft als Sicherheitsrisiko eingestuft und muss erst aktiviert werden.

Abfrage der lokalen Symlink Einstellungen

Wenn man lokal an seinem Rechner herausfinden möchte, welche Symlink-Variante aktiv oder inaktiv ist gibt es hier eine Befehl für das CMD Fenster. Hierzu muss man aber Administratoren Rechte im CMD-Fenster haben.

Im CMD-Fenster gibt man folgenden befehl ein:

fsutil behavior query symlinkevaluation

Wir erhalten dann folgende Zeilen als Antwort, hier können jedoch, je nach Einstellungen, das aktiviert und deaktiviert variieren.

Die symbolischen Links für lokal zu lokal sind aktiviert.
Die symbolischen Links für lokal zu remote sind aktiviert.
Die symbolischen Links für remote zu lokal sind deaktiviert.
Die symbolischen Links für remote zu remote sind deaktiviert.

Ändern der Symlink einstellungen

Um die Einstellungen für Symlinks zu ändern gibt es bei Microsoft 2 Möglichkeiten. Eine Möglichkeit ist es, durch Befehle die Einstellung zu ändern. Eine andere Möglichkeit kann sein, über die lokalen Gruppenrichtlinien zu gehen.

Befehle für die Einstellungen

Hierfür sind Administratoren-Rechte im CMD-Fesnter notwendig.

„lokal zu lokal“ kann man mit folgenden Befehl anschalten…

fsutil behavior set symlinkevaluation L2L:1

… oder mit diesem Befehl abschalten:

fsutil behavior set symlinkevaluation L2L:0

„lokal zu remote“ wie folgt, erst an dann aus:

fsutil behavior set symlinkevaluation L2R:1
fsutil behavior set symlinkevaluation L2R:0

„remote zu lokal“ schaut dann so aus, erst an, dann aus:

fsutil behavior set symlinkevaluation R2L:1
fsutil behavior set symlinkevaluation R2L:0

Als letztes dann „remote zu remote“, erst an dann aus:

fsutil behavior set symlinkevaluation R2R:1
fsutil behavior set symlinkevaluation R2R:0

Die Befehle können aber auf summiert werden. Möchte ich alles aktivieren gebe ich folgende ein:

fsutil behavior set symlinkevaluation L2L:1 L2R:1 R2L:1 R2R:1

Einstellungen über Gruppenrichtlinie anpassen

Wer es eher grafisch brauch und auch nicht den überblick verlieren möchte kann auch über die Gruppenrichtlinien die Einstellungen ändern.

Um die Einstellungen vorzunehmen sind auch hier Administratoren-Rechte nötig.

Je nach Windows Version müssen wir das Programm gpedit.msc starten. Wir klicken also auf den „Startknopf/Windows-Knopf“ und geben…

gpedit.msc

…ein um den „Editor für lokale Gruppenrichtlinien“ zu starten.

Im linken Bereich Navigieren wir zu folgenden Punkt:

Im Rechten Bereich (hier Windows 7) hat man folgenden Eintrag:

Diesen öffnet man mit einem Doppelklick und erhält folgende Möglichkeiten zum Einstellen:

Hier klickt man auf aktiviert und setzt unter Optionen die gewünschten Haken. Möchte man alles aktivieren sollte dieses Fenster ungefähr so aussehen:

Mit einem Klick auf OK/Übernehmen werden die Einstellungen gesetzt und man kann Symlinks aller Varianten nutzen.

Einen Symlink anlegen

Da jetzt alle Voraussetzungen geschaffen sind können wir einen Symlink zu unser Beispiel vom Anfang anlegen.

Einen Symlink lege ich im CMD-Fesnter mit Administratoren-Rechte an. In unserem Beispiel möchte ich eine Verlinkung eines Ordners von C:\Programme\getpaid4it nach D:\Programme\getpaid4it anlegen.

Als erstes Verschiebe ich den Ordner C:\Programme\getpaid4it nach D:\Programme\.

Ist der Ordner von Laufwerk C verschwunden lege ich den Symlink mit …

mklink /d C:\Programme\getpaid4it D:\Programme\getpaid4it

… an. Nun habe ich einen Symlink angelegt, welcher vom Ursprungsort auf Laufwerk D verweißt. Dieser verhält sich so, als ob das Programm noch auf Laufwerk C installiert ist. Lässt man Remote-Symlinks zu, dann kann man auch auf UNC-Pfaden verlinken.

Mit hilfe von …

mklink /?

… kann man sich die Syntax des Befehls anzeigen lassen, um weitere Möglichkeiten des Symlink-Befehls (mklink) zu sehen. Vielleicht einfach mal damit spielen um mehr zu erfahren.