Desktopbereinigung durch die Computerwartung

In einigen Foren (z. B. [1]) tauchen immer wieder Anwender auf, die sich über verschwundene Desktopverknüpfungen beschweren. Wer im Internet recherchiert, stößt aber meist nur auf Teillösungen. Aus diesem Grund skizziere ich in diesem Beitrag die Hintergründe, verlinke auf Teillösungen und beschreibe kurz, wie sich das verantwortliche PowerShell-Skript nach eigenen Wünschen anpassen lässt.


Anzeige

Problemursache für gelöschte Verknüpfungen

Unter [2] hat Autorenkollege Wolfgang Giesecke bereits die Ursache samt möglichen (Teillösungen) skizziert. Die wöchentlich ablaufende Computerwartung stößt (über den Taskplaner) verschiedene PowerShell-Skripte im Ordner Windows\diagnostics\scheduled\Maintenance\ an.

  • Das Skript TS_BrokenShortcuts.ps1 prüft, ob mehr als 4 Verknüpfungen existierten, deren Verknüpfungsziel nicht mehr existiert und löscht dann die verwaisten Elemente.
  • Ein zweites Skript TS_UnusedDesktopIcons.ps1 löscht alle Verknüpfungen, die länger als 3 Monate unbenutzt sind.

Im gleichen Ordner finden sich weitere Skripte wie RS_RemoveUnusedDesktopIcons.ps1, die meinen Kenntnissen nach aber  zur Remote-Ausführung vorgesehen sind (RS steht für Remote Skript, während TS für Taskplanner-Skript steht).

Wolfang Giesecke beschreibt unter [2], dass sich dieses Verhalten durch Abschalten der Computerwartung verhindern lässt (was aber andere Kollateralschäden nach sich zieht). Der zweite Vorschlag ist das Anpassen der Skriptdatei.

Um das Verhalten der Computerwartung hinsichtlich der Desktopbereinigung gezielt anzupassen, ist das Modifizieren der Skriptdateien TS_BrokenShortcuts.ps1 und TS_UnusedDesktopIcons.ps1 im oben genannten Ordner erforderlich. Da es bei diversen Lösungsansätzen im Internet aber heftig durcheinander geht, möchte ich die losen Enden etwas zusammenknüpfen.

Besitz der Dateien übernehmen

Der Ordner Windows\diagnostics\scheduled\Maintenance\ ist ein Systemordner und im Besitz des TrustedInstaller. Daher besitzen selbst Administratoren keinen Vollzugriff auf dessen Dateien. Um die Skriptdatei anpassen zu können, muss daher deren Besitz übernommen und Vollzugriff gewährt werden.

Sie können als Administrator das Eigenschaftenfenster der zu ändernden Skriptdateien über den Kontextmenübefehl Eigenschaften öffnen, auf der Registerkarte Sicherheit den Besitz für das Administratorkonto übernehmen und dann Vollzugriff zuweisen.


Anzeige

Falls dies Probleme bereitet, melden Sie sich unter einem Administratorenkonto an, klicken den Ordner Windows\diagnostics\scheduled\Maintenance\ im Ordnerfenster bei gedrückter rechter Maustaste an und wählen den Kontextmenübefehl Eingabeaufforderung hier öffnen. Dann öffnet sich die administrative Eingabeaufforderung und Sie können mit den Befehlen:

takeown /f TS_BrokenShortcuts.ps1
icacls TS_BrokenShortcuts.ps1 /grant administratoren:F

der Gruppe der Administratoren den Besitz sowie die Berechtigung zum Anpassen der Berechtigungen übertragen. Das Gleiche ist für die zweite Datei TS_UnusedDesktopIcons.ps1 durchzuführen. Anschließend lässt sich das Eigenschaftenfenster der Skriptdatei öffnen und dem Administratorkonto über die Registerkarte Sicherheit der Vollzugriff gewähren. Eine bebilderte Beschreibung dieser Schritte findet sich unter [3]. Erst nach diesen Vorbereitungen lassen sich Änderungen an der Datei auch speichern.

TS_BrokenShortcuts.ps1 übernehmen richtig anpassen

Dazu öffnen Sie die Skriptdatei TS_BrokenShortcuts.ps1 in der PowerShell ISE (Aufruf über die Startmenügruppe Alle Programme/Zubehör/Windows PowerShell mittels des Befehls Als Administrator ausführen) und passen diese nach eigenem Gusto an.

  • Um das Löschen gebrochener Verknüpfungen zu unterbinden, können Sie in der Funktion Get-BrokenShortcutList() sicherstellen, dass keine Dateinamen zurückgegeben werden. Gehen Sie zu Zeile 18 und setzen Sie vor die Anweisung $list = AttachTo-List $list $wmiLinkFile.Name ein Kommentarzeichen # – (dies ist imho besser als der Vorschlag aus [4], den gesamten Codeblock zu löschen).
  • Um die Zahl der zulässigen Verknüpfungen mit nicht existentem Verknüpfungsziel zu erhöhen, können Sie auch zu Zeile 44 gehen und den Wert 4 in der Teilanweisung (Get-ListLength $brokenStartupShortcuts)) -gt 4)) auf (z.  B. auf 14) erhöhen.

Anschließend sichern Sie diese Änderungen über die Speichern-Schaltfläche der PowerShell ISE.

Hinweis: Natürlich können Sie zum Anpassen der Skriptdateien auch den Windows-Editor verwenden. Die PowerShell ISE liefert Ihnen aber bereits die Zeilennummern sowie eine komfortable Bedienoberfläche. Beachten Sie aber, dass sich die obigen Angaben für Zeilennummern auf die ursprünglichen Skriptversionen beziehen. Diese könnten sich u. U. ändern, falls Microsoft die Skriptprogramme aktualisiert.

TS_UnusedDesktopIcons.ps1 ändern

Nun bleibt noch das Anpassen der zweiten Datei TS_UnusedDesktopIcons.ps1, die ja unbenutzte Desktopverknüpfungen entfernt. Gehen Sie wie im vorhergehenden Abschnitt beschrieben vor, laden aber die Datei TS_UnusedDesktopIcons.ps1 im Editor der PowerShell ISE.

  • Um das Löschen unbenutzter Verknüpfungen zu unterbinden, können Sie in der Funktion Get-UnusedShortcutList() sicherstellen, dass keine Dateinamen zurückgegeben werden. Gehen Sie zu Zeile 32 und setzen Sie vor die Anweisung $list = AttachTo-List $list $wmiLinkFile.Name ein Kommentarzeichen # (auch hier wird in [4] vorgeschlagen, den gesamten Codeblock zu löschen – was ich aber nicht machen würde).
  • Alternativ könnten Sie die Zeile 9 der Funktion Test-Unused() aufsuchen und den im letzten Parameter übergebenen Wert $threshold = $(3) auf 10 oder höher setzen.

Nach dieser Modifikation sollten Sie die Änderungen ebenfalls speichern. Anschließend sollte das Löschen der Desktopverknüpfungen unterbleiben (oder, falls Sie das Skript entsprechend angepasst haben, zumindest toleranter gehandhabt haben). Unter [5] wird eine VBScript-Lösung für Administratoren vorgestellt, die ich aber nicht getestet habe.

Nachtrag: Unter [7] findet sich noch ein Foren-Thread aus dem Microsoft Windows 7-Forum, wo Ralf Breuer eine Batch-Lösung vorstellt, die die entsprechenden .ps1-Dateien so modifiziert, dass diese keinen Skriptcode mehr enthalten. Wer nicht so ganz fit in der Bearbeitung von PowerShell-Skripten ist, dürfte mit der Lösung wohl mehr Erfolg haben.

Weiterführende Links:
[1] Microsoft-Foreneintrag
[2] Problembeschreibung von Wolfgang Giesecke
[3] Teillösung von Jörg Schmidtke
[4] Detaildiskussion (englisch) von Martin bei ghacks.net
[5] VBSript-Lösung zum Patchen (englisch)
[6] Hinweis auf RS_RemoveUnusedDesktopIcons.ps1
[7] Batch-Datei von Ralf Breuer (Forendiskussion)


Weitere Infos zu Windows 7 finden sich in meinen Windows 7-Titeln.

(c) by Günter Born www.borncity.de
The source of smart computer books


Cookies blockieren entzieht uns die Finanzierung: Cookie-Einstellungen

Dieser Beitrag wurde unter Allgemein, Problemlösung, Tipps abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

6 Antworten zu Desktopbereinigung durch die Computerwartung

  1. Pingback: Windows 7: Verknüpfungen verschwinden vom Desktop | oneyo|FAQ

  2. Hans sagt:

    Hallo Günter,
    bei den weiterführenden Links geht Nr. 7 nicht (mehr).

    Frage:
    Ich suche seit einer Weile ein Batch-Script, welches mir eine verwaiste Verknüpfung nach der Deinstallation eines Programmes löscht. Habe leider noch nichts gefunden. Hast du ggf. einen Tipp?

    Grüße aus der Nachbarschaft
    Hans

    • Günter Born sagt:

      @Hans: Danke für den Hinweis – ich schaue es mir an – momentan läuft das Hands-on zum Medion Akoya S6214T im Blog ein, da fehlt mir die Zeit zum Antworten/prüfen. Ich antworte, wenn ich wieder Luft habe.

  3. Georg sagt:

    Hallo Hans und Günter,

    wenn ich kurz mitmischen darf?

    Der korrekte Link zur Batchdatei von Ralf Breuer lautet:
    http://answers.microsoft.com/de-de/windows/forum/windows_7-desktop/desktop-icons-verschwinden/3e7303c0-e3f3-4700-a526-17b508cc8b69

    Schöne Grüße und viel Erfolg!

  4. Hans sagt:

    Hallo Günter,
    danke für die Tipps. Ich habe es jetzt nach dieser Vorlage hinbekommen:
    http://www.winhelpline.info/forum/programmierung-und-skripte/162974-vbs-script-mit-ja-nein-abfrage-fuer-datei-loeschen.html

    Daraus abgeleitet mein kleines VBS-Script zum Löschen der Desktop-Verknüpfungen:
    Set dateien = CreateObject("Scripting.FileSystemObject")
    dateien.GetFile("C:\users\public\desktop\LWS-Start.lnk").Delete
    dateien.GetFile("C:\users\public\desktop\LWS-Stop.lnk").Delete

    Gruß Hans

Schreibe einen Kommentar zu Hans Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Bitte beachtet die Regeln zum Kommentieren im Blog (Erstkommentare und Verlinktes landet in der Moderation, gebe ich alle paar Stunden frei, SEO-Posts/SPAM lösche ich rigoros). Kommentare abseits des Themas bitte unter Diskussion.