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.