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)