Rimozione dei profili utente tramite PowerShell
Su GitHub e sulla TechNet Gallery ho pubblicato lo script PowerShell Remove-UserProfile.ps1 per l’eliminazione dei profili utente che utilizza il metodo Delete della classe WMI Win32_UserProfile che è supportata da Windows Vista with SP1/Windows Server 2008.
Sebbene la classe Win32_UserProfile non contempla il metodo Delete infatti esso non è riportato nella documentazione MSDN e non è visibile tramite il comando:
Get-WmiObjec Win32_UserProfile | Get-Member -MemberType Method
Il metodo Delete viene però esposto tramite la raw view dell’oggetto WMI (ovvero tramite l’oggetto PSBASE a riguardo si veda il post What’s up with PSBASE, PSEXTENDED, PSADAPTED, and PSOBJECT?):
Get-WmiObjec Win32_UserProfile | Get-Member -MemberType Method –View Base
Lo script consente sfruttando le proprietà offerte dalla classe Win32_UserProfile di eliminare i profili utente locali o remoti in base a determinate condizioni:
- Nome utente in cui è possibile anche utilizzare il wildchar *
- Escludere un nome utente o una parte di esso utilizzando il wildchar *
- Escludere gli utenti speciali utilizzati da i servizi basandosi sulla proprietà Special della classe Win32_UserProfile
- Eliminare solo i profili non utilizzati da un determinato numero di giorni basandosi sulla proprietà LastUseTime della classe Win32_UserProfile e, nel caso di utenti locali, sulla data dell’ultimo login
Lo script supporta anche gli switch –WhatIf e –Confirm, di seguito un esempio di esecuzione dello script in cui viene mostrata la simulazione dell’eliminazione di tutti i profili utente ad eccezione di quelli il cui nome utente inizia per “Admin”:
Come detto precedentemente lo script è contenuto all’interno del mio repository su GitHub dedicato a PowerShell al seguente link https://github.com/ermannog/PowerShell/tree/master/Remove-UserProfile.
Mentre la la pagina dedica allo script su TechNet Gallery è disponibile al seguente https://gallery.technet.microsoft.com/Remove-UserProfileps1-871f57c4.
Interessante notare come PowerShell semplifichi molto lo sviluppo di simili funzionalità, infatti comparando questo script con l’applicazione .NET UPCleaner che avevo pubblicato su CodePlex nel 2010 (UPCleaner un tool per l’eliminazione ed il clear dei profili utente) si nota che con molto meno codice (interfaccia grafica a parte) si riesce a eseguire le medesime operazioni anche con lo script.
Ora che scopro che sei l’autore di UPCleaner, colgo l’occasione per ringraziarti! Sono anni che lo uso! Uno dei miei tool preferiti. Grazie!
Grazie a te per aver usato il mio tool!
Ciao Ermanno ! Ho tro.EXAMPLE 4: Delete all user profiles exclude user name Administrator
./Remove-UserProfile.ps1 -UserName “*” -ExcludeUserName Admistrator
se volessi mettere ad esempio escludi dsd1 [ utente che usiamo a scuola per tedesco] e ospite, dopo administrator cosa dovrei mettere.
Ultima cosa prendo la stringa e come dovrei lanciarla in power schell ? Grazie.
Ciao Benedetto,
al momento lo script non prevede questa possibilità, ovvero quella di elencare una serie di utenti da escludere.
Potresti però evitare di usare l’utente Administrator e creati un account di amministrazione chiamandolo ad esempio dsdadmin in
questo modo potresti configurare l’script per evitare la cancellazione degli account che iniziano dsd
./Remove-UserProfile.ps1 -UserName “*” -ExcludeUserName “dsd*”
Spero di esserti stato utile