Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Ablage der temporären Dateien für Windows konfigurieren – Best Practice

Gerade habe ich einem Kunden detailliert erklärt, warum es – aus meiner Sicht – Sinn macht, die originale Konfiguration für die Ablage der temporären Dateien auf einem Windows-System zu ändern – warum also nicht gleich einen kleinen Beitrag dazu schreiben. Da sowohl das Betriebssystem als auch fast jedes Programm temporäre Dateien (zur Laufzeit) erzeugen, diese aber in den seltensten Fällen auch wieder entfernen, belegen selbige nach einiger Zeit eine Menge Speicherplatz – und das an verschiedenen Stellen.

Im Standard speichert Windows (bei Client und Server identisch) die temporären Dateien an zwei verschiedenen Orten, abhängig ob für das System oder den Benutzer. Das System speichert seine temporären Dateien unter dem Pfad

%WinDir%\Temp

für den Benutzer wird immer folgender Pfad

%UserProfile%\Lokale Einstellungen\Temp

verwendet. Diese Pfade stehen dabei als Umgebungsvariablen (Systemeigenschaften, Erweitert, Umgebungsvariablen) allen Anwendungen zur Verfügung:

%TEMP% und %TMP%

Alle Programme, die temporäre Dateien erzeugen, nutzen diese Variablen, um ihre Daten dort abzulegen. Es wird schnell ersichtlich, dass Systemprozesse (z.B. Windows Update) und Programme ihre temporären Dateien, abhängig vom angemeldeten Benutzer, an unterschiedlichen Stellen „verteilen“ – eine unschöne Sache, wie ich finde.

Aus diesem Grund habe ich für unsere betreuten Systeme  eine Lösung geschaffen, die diese Problematik sauber und einfach in den Griff bekommt. Da ich ja ein Fan automatischer Lösungen bin, besteht deren Umsetzung aus einer Kombination von Skripten und der Anwendung von Gruppenrichtlinien. Wer keine Domäne hat, kann die beiden folgenden Skripte aber auch lokal ausführen.

Download der Skripte: Temp-System.vbs und Temp-User.vbs

Die Einbindung der Skripte in Gruppenrichtlinien habe ich bereits in dem Artikel VBS Skripte für eine Windows 2003 Domäne beschrieben, bei einer Windows Server 2008 (R2) Domäne werden diese nicht mehr benötigt, da die Registry-Einstellungen direkt über die Gruppenrichtlinien-Erweiterungen für Windows Server 2008 vorgenommen werden können.

Ausführung

Das erste Skript Temp-System.vbs sorgt dafür, dass auf dem %SystemDrive% (typischerweise Laufwerk C: ) ein neuer Ordner Temp erstellt wird. Bei der Ausführung durch eine Gruppenrichtlinie erfolgt selbige vor der Benutzeranmeldung beim Starten des Systems (Computerkonfiguration). Anschließend werden die beiden System-Umgebungsvariablen TEMP und TMP in der Registry auf diesen Wert gesetzt:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\
“TEMP”=REG_SZ:%SystemDrive%\Temp
“TMP”=REG_SZ:%SystemDrive%\Temp

Das zweite Skript Temp-User.vbs ist von dem ersten abhängig, bei Ausführung durch eine Gruppenrichtlinie erfolgt selbige nach der Benutzeranmeldung. Dabei wird in dem neu erstellten Ordner ein Unterordner mit dem Benutzernamen erzeugt:

%SystemDrive%\Temp\%Username%

Dieser Ordner wird nun wiederum im Benutzer-abhängigen Teil der Registry aktualisiert:

HKCU\Environment
“TEMP”=REG_SZ:%SystemDrive%\Temp\%Username%
“TMP”=REG_SZ:%SystemDrive%\Temp\%Username%

Bei Anzeige der konfigurierten Umgebungsvariablen sollte dann folgende Einstellung erscheinen:

Die Werte können auch in einer Kommandozeilenbox mit dem Befehl set abgefragt und kontrolliert werden.

Von nun an werden alle System-temporären Dateien unter %SystemDrive%\Temp und alle Benutzer-temporären Dateien unter %SystemDrive%\Temp\%Username% abgelegt. Ein zentraler Ort, von dem diese wiederum schnell entfernt und das System gesäubert werden kann. Diese Aufgabe kann bspw. ein Abmelde-Skript (Batch-Datei) mit folgendem Inhalt erfüllen:

@echo off
del %SystemDrive%\Temp\%Username%\*.* /F /S /Q
rd %SystemDrive%\Temp\%Username% /S /Q

Zugegeben, für einen einzelnen Benutzer an einem einzelnen Computer macht dieser ganze Aufwand relativ wenig Sinn, dennoch vereinfacht es die „Säuberung“ des Systems von nicht benötigten, temporären Dateien.

Exkurs Terminalserver

Ganz anders verhält es sich aber bei der Anmeldung von mehreren Benutzern an einem System – zum Beispiel bei einem Terminalserver. In größeren Umgebungen ist es sinnvoll Server-gespeicherte Terminalserverprofile für die Benutzer zu verwenden – bei Einsatz von NLB (Network Load Balancing) in Terminalserver-Farmen ist dies sogar Voraussetzung. Allerdings werden hier die Benutzerprofile beim Anmelden auf den Terminalserver kopiert und nach der Abmeldung zurück synchronisiert und wieder gelöscht. Leider habe ich es schon erlebt, dass einige Anwendungen temporäre Dateien erstellt haben, die trotz Beendigung der Anwendung noch ein Datei-Handle besaßen und nicht vom Terminalserver bei der Abmeldung gelöscht werden konnten. Als Folge wurde auch das Profilverzeichnis nicht gelöscht, was zu unschönen „Profil-Leichen“ führte. Mit der Änderung der temporären Ordner-Konfiguration konnte dieses Problem einfach gelöst werden.

Der neue temporäre Ordner für den Benutzer %SystemDrive%\Temp\%Username% lässt sich aber durchaus für eine Reihe weiterer Einstellungen benutzen. So kann man bspw. den Internet Explorer durch die Registryschlüssel

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\
“Cache”=REG_SZ:%TEMP%\Temporary Internet Files
“Cookies”=REG_SZ:%TEMP%\Cookies
“History”=REG_SZ:%TEMP%\History

zur Ablage des Verlaufs, Cookies und temporären Internet-Dateien im neuen Benutzer-Temp-Ordner „zwingen“. Speziell für Terminalserverprofile eine feine Sache, da die Synchronisierung der Benutzerprofile erheblich beschleunigt wird.

Fazit

Die dargestellte Konfiguration der temporären Ordner ist keinesfalls ein Muss. Für mich hat sie sich allerdings in der Vergangenheit bei der Administration der unterschiedlichsten Systeme bewährt. Die zentrale Ablage der gesamten temporären Dateien eines Systems ermöglicht zum einen die einfache Kontrolle bezgl. des Umfangs als auch eine schnelle Säuberung. Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

6 Kommentare für “Ablage der temporären Dateien für Windows konfigurieren – Best Practice”

  • Winfried

    Hallo Bent,

    zum löschen des Tempfolders benutz ich schon seit langer Zeit das Script http://www.helmrohr.de/ftproot/Deltemp.zip von Helmut Rohrbeck. Das Script hat IMHO den Vorteil, es prüft beim löschen der Tempdateien ab, ob die Tempdateien für eine noch fertig zu stellende Installation benötigt werden. Ein nicht zu unterschätzender Vorteil. Insbesonders dann, wenn man etwas installieren möchte, und eine vorherige Installation nicht sauber beendet wurde. Das bekommt man durch die Messagebox mit.

    Servus
    Winfried

  • Bent Schrader

    Hallo Winfried,

    vielen Dank für den Tipp. Ich habe mir das Skript einmal angeschaut – die Prüfung der „PendingFileRenameOperations“ ist ein wichtiger Gedanke. Allerdings kommt das für die Terminalserverbenutzer nicht in Frage, da diese sowieso keine Berechtigung zur Installation von Applikationen haben. Aus diesem Grund lösche ich in dem obigen Batch-Skript auch nur den betreffenden Benutzer-Temp-Ordner, der System-Temp-Ordner bleibt erhalten. Einzig die PopUp-Meldungen im Skript finde ich ungünstig, da diese in größeren Umgebungen schnell lästig werden – eine Eintrag im Ereignisprotokoll (oder ein anderes Log) finde ich vorteilhafter, da so die Aktion „still“ verläuft und gleichzeitig dokumentiert wird.

    Gruß,
    Bent

  • Winfried

    Hallo Bent,

    die PopUp Meldung in dem Script lässt sich leicht abschalten und evtl. sogar durch einen Aufruf einer Funktion ersetzen, die dann direkt ins Eventlog schreibt.

    Bei TS-Usern ist das Script so natürlich nicht nötig, für normale Workstations hab ich das im Einsatz.

    Servus
    Winfried

  • Roman Leininger

    Hallo Bent,

    ich habe mir deinen Artikel sehr genau angesehen, da es in etwa das ist, was ich bei unserem System (Server 2008 R2 auf Netapp; sowie VDI Desktops auch auf Netapp) konfigurieren möchte.

    Allerdings gibt es bei uns ein sogenanntes Disposable Laufwerk, auf dem ich diese Temp-Ordner haben möchte. Dieses Laufwerk wird automatisch bei Neustart geleert. Also meines Erachtens perfekt dafür geeignet.

    Meine Frage dazu: (ich bin ein Skript-Neuling das mal vorweg!)
    Wie kann ich dein Skript so umbauen, dass die Temp-Ordner nicht auf dem Systemdrive liegen, sondern auf Laufwerk E (eben jenes Disposable-Laufwerk)?

    Da die User in der VDI sowieso keine Programme installieren dürfen (kommt alles vom Parent-Image) gibt es, denke ich, auch kein Problem mit der automatischen Löschung des Laufwerks… Sehe ich das richtig, oder habe ich irgendwas übersehen.

    Vielen Dank schon mal für die Auskunft.

    Liebe Grüße aus Wien!
    Roman

  • Bent Schrader

    Hallo Roman,

    sorry für die späte Antwort. In den Skripten musst Du einfach nur die Variable %SystemDrive% (diese beinhaltet den Laufwerksbuchstaben des Volumes auf dem das Betriebssystem installiert wurde) durch E: ersetzen.
    Mittlerweile nutze ich für die Erstellung der Ordner und das Setzen der Variablen Gruppenrichtlinien – seit Windows Server 2008 R2 sind diese Einstellung sehr einfach.
    Das Löschen der Dateien musst Du nach wie vor über ein Skript erledigen (entweder Abmeldung des Benutzers oder zentral beim Reboot des Systems (temp-system.vbs)).

    Grüße aus Dresden,
    Bent

  • T. Gerns

    Sehr geehrter Herr Schrader,

    ich habe Ihre Scripte wie in den Anleitungen über GPO auf einem SBS 2011 verteilt. Leider bislang keine Änderungen, die TMP-Umgebungsvariable zeigt immer noch auf die lokalen Verzeichnisse.

    Können Sie mir dabei helfen das ich den Gang zu bekommen?

    Gruß

Einen Kommentar hinterlassen:

Antispam Bee hat Bent's Blog vor 370.161 Spam-Kommentaren bewahrt.