xCtrl
Lt. Commander
- Registriert
- Dez. 2011
- Beiträge
- 1.568
Hallo in die Runde,
ich sitze aktuell an einem Power Shell Skript, welches auf meinen Terminal Servern (2008R2, Citrix 6.5, PSv1) vor (oder auch nach) dem täglichen nächtlichen Neustart übrig- und hängen gebliebene Benutzerprofile löschen soll. Ein PS Script zum Abmelden der letzten Benutzer vor dem Neustart habe ich bereits erfolgreich umgesetzt. Verwendet werden auf den TSsen Roaming Profiles, die nach der Abmeldung des Benutzers zurück in den Profilestore geschrieben werden. Zu 3/4 klappt das auch, aber teilweise bleiben Profile aus unterschiedlichen Gründen zurück. Ich lasse das mal so stehen...
Laut Doku auf TechNet eignet sich eine WMI Abfrage, da diese zusammenhängend die Benutzerprofile samt seiner Registry-Einträge ermitteln kann.
Bis jetzt komme ich soweit, mit entsprechender Abfrage bestimmte Profilordner ausgenommen, mir die aktuell auf dem Server befindlichen Profile abzufragen und in eine Variable zu packen.
und da habe ich als Beispiel schon direkt einen Übeltäter: ein nicht geladenes Profil, da der Benutzer nicht mehr auf dem Server angemeldet ist.
So, laut Dokumentation bei TechNet sollte mit diesem Befehl das Profil, welches ja durch eine WMI Abfrage ermittelt wurde, gelöscht werden können:
Und hier hakt es bei mir. Denn PS meldet in schöner roter Schrift darauf folgendes:
Habe ich einen Denkfehler? Ich kann mit der Info im Moment nicht viel anfangen
Das Quellscript habe ich von Hier (SpiceWorks), allerdings wird das Ganze in einem Zug, ohne Variablen, durchgeackert. Ich habe schon vermutet, dass es daran liegt, weil ich abweichend davon mit Variablen arbeite, aber leider Fehlanzeige. Auch mit Angabe des Parameters ($allprofiles.localpath) meckert er rum. Selbst wenn ich das Skript aus der Quelle so anwende, meldet mir Power Shell das gleiche.
Hat jemand eine Idee?
Gruß
ich sitze aktuell an einem Power Shell Skript, welches auf meinen Terminal Servern (2008R2, Citrix 6.5, PSv1) vor (oder auch nach) dem täglichen nächtlichen Neustart übrig- und hängen gebliebene Benutzerprofile löschen soll. Ein PS Script zum Abmelden der letzten Benutzer vor dem Neustart habe ich bereits erfolgreich umgesetzt. Verwendet werden auf den TSsen Roaming Profiles, die nach der Abmeldung des Benutzers zurück in den Profilestore geschrieben werden. Zu 3/4 klappt das auch, aber teilweise bleiben Profile aus unterschiedlichen Gründen zurück. Ich lasse das mal so stehen...
Laut Doku auf TechNet eignet sich eine WMI Abfrage, da diese zusammenhängend die Benutzerprofile samt seiner Registry-Einträge ermitteln kann.
Bis jetzt komme ich soweit, mit entsprechender Abfrage bestimmte Profilordner ausgenommen, mir die aktuell auf dem Server befindlichen Profile abzufragen und in eine Variable zu packen.
Code:
# Variablen deklarieren
$profilepath = "C:\Users\"
$admin = "administrator"
$ctx_stream = "Ctx_StreamingSvc"
$currentuser = $env:username
# Watson, kombiniere Profilpfad mit Usernamen der Profilordner, die von der Abfrage ausgenommen werden sollen
$adminpath = $profilepath + $admin
$ctxpath = $profilepath + $ctx_stream
$myself = $profilepath + $currentuser
# Abfrage der Benutzerprofile mit entsprechenden Filtern, sodass nur Userprofile als Ergebnis rauskommen
$allprofiles = Get-WMIObject -class Win32_UserProfile | where {(!$_.Special) -and $_.LocalPath -ne $adminpath -and $_.LocalPath -ne $ctxpath -and $_.LocalPath -ne $myself} | select localpath, sid, loaded
# Gib mir das Ganze mal aus
echo $allprofiles
localpath sid loaded
--------- --- ------
C:\Users\BENUTZERORDNER S-1-5-21-3609199022-3933120324-22675... False
und da habe ich als Beispiel schon direkt einen Übeltäter: ein nicht geladenes Profil, da der Benutzer nicht mehr auf dem Server angemeldet ist.
So, laut Dokumentation bei TechNet sollte mit diesem Befehl das Profil, welches ja durch eine WMI Abfrage ermittelt wurde, gelöscht werden können:
Code:
$allprofiles | Remove-WMIObject
Und hier hakt es bei mir. Denn PS meldet in schöner roter Schrift darauf folgendes:
Remove-WmiObject : Das Eingabeobjekt kann an keine Parameter des Befehls gebunden werden, da der Befehl keine Pipelineeingaben akzeptiert oder die Eingabe und deren Eigenschaften mit keinem der Parameter übereinstimmen, die Pipelineeingaben akzeptieren.
Bei Zeile:1 Zeichen:32
+ $allprofiles | Remove-WmiObject <<<<
+ CategoryInfo : InvalidArgument: (@{localpath=C:\...; loaded=False}SObject) [Remove-WmiObject], Parame
terBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.RemoveWmiObject
Habe ich einen Denkfehler? Ich kann mit der Info im Moment nicht viel anfangen
Das Quellscript habe ich von Hier (SpiceWorks), allerdings wird das Ganze in einem Zug, ohne Variablen, durchgeackert. Ich habe schon vermutet, dass es daran liegt, weil ich abweichend davon mit Variablen arbeite, aber leider Fehlanzeige. Auch mit Angabe des Parameters ($allprofiles.localpath) meckert er rum. Selbst wenn ich das Skript aus der Quelle so anwende, meldet mir Power Shell das gleiche.
Hat jemand eine Idee?
Gruß
Zuletzt bearbeitet: