allyfied
Goto Top

User Profile Disk eines gelöschten Users entfernen

Hallo zusammen,
irgendwie stehe ich gerade auf dem Schlauch...

In einer Windows Server 2016 AD Umgebung mit Remote Desktops habe ich einen User gelöscht. Soweit so gut. Allerdings ist die User Profile Disk des entsprechenden Benutzers immer noch vorhanden und belegt mit knapp 70 GB unnötigen Speicherplatz.
Diese Daten können definitiv weg, aber ich dann die entsprechende vdhx-Datei einfach nicht löschen, da mir gesagt wird, die Datei würde noch in Verwendung sein.

Wo muss ich hin, um diese Datei entgültig zu löschen?

Viele Grüße
Ally

Content-ID: 576340

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 03.06.2020 um 14:28:31 Uhr
Goto Top
Moin,

Du könntest mit SIDDER feststellen, ob die noch gemountet ist, in der Computerverwaltung sie ggf. freigeben oder den Server einfach mal durchbooten und es dann probieren.

Gruß
bdmvg
Allyfied
Allyfied 03.06.2020 aktualisiert um 14:37:53 Uhr
Goto Top
Hi,
gemountet ist sie nicht. Der Process Explorer meint es gäbe 3 Handles vom Prozess System auf diese vdhx-Datei.
Neustart probiere ich heute Abend, wenn (k)einer mehr arbeitet face-smile

Die Frage ist: Was neustarten? Den Fileserver, auf dem die Datei liegt oder den RD-Server und/oder den RD-Gateway?
tech-flare
tech-flare 03.06.2020 um 15:36:03 Uhr
Goto Top
Schau doch einfach im CompMgmt von dem Server wo die VHDX liegen, welche Person oder welcher Server die Datei geöffnet hat? Ggf. wurde die Sitzung nicht sauber abgemeldet.
tech-flare
Lösung tech-flare 03.06.2020 aktualisiert um 20:23:49 Uhr
Goto Top
Die Frage ist: Was neustarten? Den Fileserver, auf dem die Datei liegt oder den RD-Server und/oder den RD-Gateway?
Den Fileserver...du kannst aber auch den Zugriff beendet.
Allyfied
Allyfied 03.06.2020 um 20:14:38 Uhr
Goto Top
Ok, nach dem Neustart konnte ich die Datei löschen.

Muss ich denn jedes Mal den Server neustarten, wenn ich den Müll, eines seit mind. 6 Monaten inaktiven Users, löschen will?
beidermachtvongreyscull
beidermachtvongreyscull 03.06.2020 um 20:22:48 Uhr
Goto Top
Nein.

Das sollte eigentlich so gehen.

Es gibt auch "File unlock"-Werkzeuge, die nicht aufgehobene Handles und Sperren lösen könnten.

Ich würde die aber nicht in jedem Fall einsetzen.
tech-flare
tech-flare 03.06.2020 um 20:25:14 Uhr
Goto Top
Zitat von @Allyfied:

Ok, nach dem Neustart konnte ich die Datei löschen.

Muss ich denn jedes Mal den Server neustarten, wenn ich den Müll, eines seit mind. 6 Monaten inaktiven Users, löschen will?


Nein. Es geht so, oder du beendest über compmgmt.msc den Zugriff auf die VHDX wie bereits oben geschrieben ;)
Daemmerung
Daemmerung 03.06.2020 um 20:26:45 Uhr
Goto Top
Du könntest versuchen die Sitzung auf dem File-Server für diese eine Datei zu beenden.

Computerverwaltung -> Freigaben -> Sitzungen -> entsprechende Sitzung beenden.

Schau dann noch bei den geöffneten Dateien, ob dort auch etwas vorhanden ist. Vielleicht reicht das ja, damit du den Server nicht neustarten musst.

Viele Grüße
beidermachtvongreyscull
Lösung beidermachtvongreyscull 03.06.2020 um 20:33:27 Uhr
Goto Top
Ergänzung:

Ich halte es für möglich, wenn die Sitzung auf dem TS nicht sauber abgemeldet wurde oder, dass die Verbindung zwischen dem UPDHost und dem TS mal weg war.

Die VHDX kann dann in einen Zustand fallen, der sie verriegelt und nicht freigibt.

Bei UPDs ist es immer wichtig, dass die Sitzungen sauber abmelden. Dann werden die auch losgelassen.
Allyfied
Allyfied 03.06.2020 um 20:49:50 Uhr
Goto Top
Zitat von @beidermachtvongreyscull:

Die VHDX kann dann in einen Zustand fallen, der sie verriegelt und nicht freigibt.


Ja, diesen Fall hatte ich hier auch kürzlich, da der TS gerne mal komplett abschmiert - dank eines netten Programms, welches alle User benutzen sollen. Aber das ist eine andere Geschichte.

Danke soweit, jetzt ist erst einmal wieder etwas Platz auf der UserProfileDisk.
beidermachtvongreyscull
beidermachtvongreyscull 03.06.2020 um 21:14:25 Uhr
Goto Top
Ich hätte noch einen Tipp für Dich:

Ich verwende an meiner TS-Farm fünf Scripte:

1. Zum Sperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
2. Zur automatischen Abmeldung der Benutzer innerhalb eines festgelegten Zeitpunkts. (VBScript von jedem Nutzer gestartet)
3. Zum Reboot aller TS in Reihenfolge. (Powershell)
4. Zum Defrag und Resizing der UPDs. (Powershell)
5. Zum Entsperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)

Dadurch kann ich einen Großteil schon automatisieren.
Wenn Du Interesse hast, stelle ich sie Dir zur Verfügung.
tech-flare
tech-flare 03.06.2020 um 22:19:20 Uhr
Goto Top
1. Zum Sperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Geht doch such über den Broker über die GUI. Oder automatisierst du das? Wenn ja warum?
2. Zur automatischen Abmeldung der Benutzer innerhalb eines festgelegten Zeitpunkts. (VBScript von jedem Nutzer gestartet)
Ich lass den Server automatisch Neustarten, da werden die User auch sauber angemeldet. Entweder über Aufgabenplanung oder direkt übers das vCenter.
VBScript ist sowieso überholt ;)
3. Zum Reboot aller TS in Reihenfolge. (Powershell)
Siehe Antwort oben
4. Zum Defrag und Resizing der UPDs. (Powershell)
Das bringt welchen Vorteil? Außer „Speicherplatz?
5. Zum Entsperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Geht ja über die GUI vom Broker ;). Wie Punkt 1.
beidermachtvongreyscull
beidermachtvongreyscull 04.06.2020 um 03:23:39 Uhr
Goto Top
Zitat von @tech-flare:

1. Zum Sperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Geht doch such über den Broker über die GUI. Oder automatisierst du das? Wenn ja warum?

Ja. Weil ich dann sonntagnachts um 1 Uhr pennen kann und nicht aufstehen muss.

2. Zur automatischen Abmeldung der Benutzer innerhalb eines festgelegten Zeitpunkts. (VBScript von jedem Nutzer gestartet)
Ich lass den Server automatisch Neustarten, da werden die User auch sauber angemeldet. Entweder über Aufgabenplanung oder direkt übers das vCenter.

Ich sehe einen Unterschied zwischen Sessionkill von außen und Sessionlogoff aus dem Kontext des Benutzers.

VBScript ist sowieso überholt ;
Und dennoch gibt es diese Sprache immernoch. Selbst die Lizenzsteuerung slmgr.vbs ist ein Vbscript. Sie hat gewisse Vorzüge, die ich nicht missen möchte.


3. Zum Reboot aller TS in Reihenfolge. (Powershell)
Siehe Antwort oben

Siehe Antwort oben.
4. Zum Defrag und Resizing der UPDs. (Powershell)
Das bringt welchen Vorteil? Außer „Speicherplatz?
Mehr Tempo.
5. Zum Entsperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Geht ja über die GUI vom Broker ;). Wie Punkt 1.
Siehe oben. Ich kann pennen.
tech-flare
tech-flare 04.06.2020 um 09:08:51 Uhr
Goto Top
Siehe Antwort oben.
4. Zum Defrag und Resizing der UPDs. (Powershell)
Das bringt welchen Vorteil? Außer „Speicherplatz?
Mehr Tempo.
Bei was? Dort drin liegen doch nur Appdata, Downloads, Dokumente, Bilder

Interessiert mich nur, da ich auch 2 TS Farmen betreibe
beidermachtvongreyscull
beidermachtvongreyscull 04.06.2020 um 09:32:59 Uhr
Goto Top
Zitat von @tech-flare:

Siehe Antwort oben.
4. Zum Defrag und Resizing der UPDs. (Powershell)
Das bringt welchen Vorteil? Außer „Speicherplatz?
Mehr Tempo.
Bei was? Dort drin liegen doch nur Appdata, Downloads, Dokumente, Bilder

Interessiert mich nur, da ich auch 2 TS Farmen betreibe

Appdata ist eine der Verzeichnisstrukturen, die die höchste Schreib-/Leselast aufweisen. Jedes Programm, dass mit temporären Dateien und/oder Profilen auf Dateibasis arbeitet, liest und schreibt da rein. Allen voran so ziemlich jeder Internetbrowser, wenn Du das nicht umgedreht hast.

Eine UPD-VHDX bläht sich nunmal auf bis zur festen Größe.

Meine Erfahrung hat mir gezeigt, dass eine solche Offline-Wartung durchaus sinnvoll und gut ist zumal ich den ganzen Dreck nicht mehr mitsichern muss.
Allyfied
Allyfied 06.06.2020 um 06:30:31 Uhr
Goto Top
Hallo beidermachtvongreyskull,
Selbstverständlich habe ich Interesse an den Skripten.
Den Neustart lasse ich über die Aufgabenplanung laufen, was aber nicht funktioniert, wenn noch jemand angemeldet ist.
Auch das Resizing halte ich für sinnvoll, da es schon erhebliche Diskrepanzen zwischen der Größe der UPD und den tatsächlichen enthalten Daten gibt.
Viele Grüße
Ally
beidermachtvongreyscull
beidermachtvongreyscull 09.06.2020 aktualisiert um 17:07:57 Uhr
Goto Top
1.
Zum Sperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Einbindung über die Aufgabenplanung des ConnectionBrokers.

#Import-Module RemoteDesktop
ForEach ($CollectionName in Get-RDSessionCollection)
{
     ForEach ($HostToDisable in (get-rdsessionhost -collectionname $CollectionName.CollectionName | 
              where {$_.NewConnectionAllowed -ne "No"}))  
     {
          $HostToDisable
          Set-RDSessionHost $HostToDisable.SessionHost -NewConnectionAllowed "No"  
     }
}

2. Zur automatischen Abmeldung der Benutzer innerhalb eines festgelegten Zeitpunkts. (VBScript von jedem Nutzer gestartet)
Wird als Startscript von jedem Nutzer gestartet. Der Abmeldezeitraum sollte hinter dem Sperrzeitpunkt des ersten Scriptes liegen.
Dann kann sich niemand mehr anmelden und die noch angemeldeten Nutzer werden automatisch abgemeldet:
Terminalserver - automatische Abmeldung aller Benutzer innerhalb eines gesetzten Zeitfensters

3. Zum Reboot aller TS in Reihenfolge. (Powershell)
Einbindung wieder über die Aufgabenplanung des Connection Brokers.
Alle SessionHosts in der gefundenen Collection werden nach einander gestartet. Es wird immer gewartet, bis die Powershell des Rechners wieder antwortet, bevor der nächste dran ist.

ForEach ($CollectionName in Get-RDSessionCollection)
{
     ForEach ($HostToReboot in (get-rdsessionhost -collectionname $CollectionName.CollectionName))
     {
          $HostToReboot
          Restart-Computer -ComputerName $HostToReboot.SessionHost -Wait -For PowerShell -Timeout 300 -Delay 2
     }
}

4. Zum Defrag und Resizing der UPDs. (Powershell)
https://github.com/T13nn3s/Resize-UserProfileDisk

5. Zum Entsperren der Möglichkeit, neue Sitzungen anzumelden. (Powershell)
Erfolgt zum Schluss über die Aufgabenplanung des Connection Brokers.

ForEach ($CollectionName in Get-RDSessionCollection)
{
     ForEach ($HostToEnable in (get-rdsessionhost -collectionname $CollectionName.CollectionName | 
              where {$_.NewConnectionAllowed -ne "Yes"}))  
     {
          $HostToEnable
          Set-RDSessionHost $HostToEnable.SessionHost -NewConnectionAllowed "Yes"  
     }
}

Seit ich das so mache, habe ich Sonntags etwas länger frei. face-smile

Gruß
bdmvg