Archivo del blog

06 noviembre 2019

Cómo borrar perfiles locales remotamente en Windows 7

Tras la incorporación al nuevo cliente el pasado enero, uno de los tickets más recurrentes que teníamos era por culpa de los equipos de las salas de reuniones.

Todos los usuarios de la empresa pasaban tarde o temprano por alguna sala e incluso abrían el Outlook en el equipo de la sala, con la debida sincronización del OST y claro tras 4 o 5 usuarios identificados en el equipo este se quedaba casi sin espacio en el disco, y así con todos los equipos de salas.

Tras reunirnos para mirar de acotar y eliminar este problema de nuestra cola, optamos la inclusión de estos equipos en una OU especial donde el SCCM se encargase de borrar los discos de estas máquinas cada semana aproximadamente. Dicho parche funcionó bien durante la menos 1 mes.

Otra vez teníamos encima de la mesa esta problemática, lentitud en los equipos de reunión, imposibilidad  de abrir el correo, modificar documentos...

Y entonces optamos por la ejecución remota de un script para borrar los perfiles de los equipos de reunión. Al principio era una tarea ardua ya que en algunos equipos habían más de 20 usuarios con una media de 30 GB por cabeza, pero tras unas semanas ejecutando el parche semanalmente, y con la ayuda de las políticas del SCCM hemos podido acotar este tipo de tickets.

Fuente: Google y nuestro compañero de WorkPlace.


CÓDIGO


#Prompt for a computer to connect to
$computer = Read-Host "Ingrese el Equipo donde quiere eliminar el perfil"
#Test network connection before making connection
If ($computer -ne $Env:Computername) {
    If (!(Test-Connection -comp $computer -count 1 -quiet)) {
        Write-Warning "$computer El PC no esta accesible , Verifique que este encendido."
        Break
        }
    }
Try {    
    #Verify that the OS Version is 6.0 and above, otherwise the script will fail
    If ((Get-WmiObject -ComputerName $computer Win32_OperatingSystem -ea stop).Version -lt 6.0) {
        Write-Warning "Sistema Operativo No soportado.`nClient: Vista and above`nServer: Windows 2008 and above."
        Break
        }
    }
Catch {
    Write-Warning "$($error[0])"
    Break
    }    
Do {    
#Gather all of the user profiles on computer
Try {
    [array]$users = Get-WmiObject -ComputerName $computer  
Get-CimInstance -ClassName Win32_UserProfile -filter "LocalPath Like 'C:\\Users\\%'" -ea stop
    }
Catch {
    Write-Warning "$($error[0]) "
    Break
    }    
#Cache the number of users
$num_users = $users.count
Write-Host -ForegroundColor Green "Perfiles Disponibles para eliminar $($computer):"
    #Begin iterating through all of the accounts to display
    For ($i=0;$i -lt $num_users; $i++) {
        Write-Host -ForegroundColor Green "$($i): $(($users[$i].localpath).replace('C:\Users\',''))"
        }
    Write-Host -ForegroundColor Green "q: Cancelar"
    #Prompt for user to select a profile to remove from computer
    Do {    
        $account = Read-Host "Seleccione el Numero del perfil a eliminar o 'q' para cancelar"
        #Find out if user selected to quit, otherwise answer is an integer
        If ($account -NotLike "q*") {
            $account = $account -as [int]
            }
        }        
    #Ensure that the selection is a number and within the valid range
    Until (($account -lt $num_users -AND $account -match "\d") -OR $account -Like "q*")
    If ($account -Like "q*") {
        Break
        }
    Write-Host -ForegroundColor red "Eliminando Perfil: $(($users[$account].localpath).replace('C:\Users\',''))"
    #Remove the local profile
    ($users[$account]).Delete()
    Write-Host -ForegroundColor Green "Perfil:  $(($users[$account].localpath).replace('C:\Users\',''))
Ha sido eliminado correctamente"
    #Configure yes choice
    $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","Desea eliminar Otro Perfil."
    #Configure no choice
    $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No","Salir/No eliminar Mas perfiles"
    #Determine Values for Choice
    $choice = [System.Management.Automation.Host.ChoiceDescription[]] @($yes,$no)
    #Determine Default Selection
    [int]$default = 0
    #Present choice option to user
    $userchoice = $host.ui.PromptforChoice("","Desea eliminar Otro Perfil?",$choice,$default)
    }
#If user selects No, then quit the script    
Until ($userchoice -eq 1)

No hay comentarios:

Publicar un comentario

🚀 Automatiza la instalación de Windows como un PRO con Unattend Generator

Si alguna vez has tenido que instalar Windows repetidamente, sabrás lo tedioso que puede ser pasar una y otra vez por las mismas pantallas d...