Script Matar Procesos Libreoffice
Hoy os quiero enseñar como matar procesos de Libreoffice a través de Powershell. Os explico un poco los casos de uso para este script. Un aplicativo que no puede tener sesiones en memoria por más de 1 minuto ya que puede dar problemas.
Al final, cuando abres SCALC, por ejemplo, en memoria se generan varios procesos Windows, esos son soffice.bin, soffice.exe, scalc.exe…y si abrimos SWORD, pues sword.exe pero no otro SOFFICE.EXE ni SOFFICE.BIN. Y esto se repite por cada usuario que esté logueado en el equipo.
1 2 3 4 5 6 |
----soffice.bin ----soffice.exe |_______ scalc.exe |_______ sword.exe |
Si matas soffice.exe no matas los subprocesos, pero eso sí pasa con soffice.bin. Así que, vamos a mirar directamente a SOFFICE.bin para forzar su cierre. Miraremos el ID y nos aseguramos que el proceso de Libreoffice no esté en memoria más de 60 segundos.
Os dejo el script y la explicación por sección, deja log por pantalla y en fichero:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
############################################################################## ############## ############# Script Raúl para el Blog de Negu - 24062018 ############# ############ Parar procesos con más de 60 segundos en memoria ############################################################################## # Clear-Host # Cargamos una variable con la hora menos 60 segundos $60Segundos = (Get-Date).AddSeconds(-60) # Cargamos variable con el cmd más antiguo en memoria $Procs = get-process -name soffice.bin -ErrorAction SilentlyContinue | Sort StartTime | Select -First 1 # Empezamos a escribir el log # Start-Transcript ("c:\script\log\matar-procesos{0:yyyyMMdd-HHmmss}.log" -f (Get-Date)) # Si existen procesos en memoria los comprueba if ($Procs -ne $null) { # Revisamos los IDs ForEach ($ProcID in $Procs.ID) { # Vemos la diferencia de tiempo $diferencia = $60Segundos - $Procs.StartTime # Si la diferencia es igual o mayor que 1 minuto if ($diferencia.Minutes -ge '1') { $hora1 = Get-Date # Matamos los IDs de los procesos de más o igual a 1 minuto stop-process -id $ProcID -Force # Exportamos todo a un fichero log $log1 = Write-Output "Forzamos cierre proceso $ProcID, el dia $hora1, llevaba $diferencia minutos" Add-Content $log1 -Path "c:\script\log\matar-procesos.log" Write-Output "##############PROCESOS CERRADOS###############" Write-Output "Forzamos cierre proceso $ProcID, el dia $hora1, llevaba $diferencia minutos" Write-Output "##########FIN PROCESOS CERRADOS###############" } # Si hay procesos soffice pero no tienen más de o igual de 1 minuto else { $hora2 = Get-Date # Exportamos todo a un fichero log $log2 = Write-Output "$hora2, no hay procesos de mas de 60seg que cerrar" Add-Content $log2 -Path "c:\script\log\matar-procesos.log" Write-Output "##############NO HAY PROCESOS DE 60SEG###############" Write-Output "$hora2, no hay procesos de mas de 60seg que cerrar" Write-Output "##########FIN PROCESOS CERRADOS###############" } } } # Si no existen procesos soffice en memoria else { $hora3 = Get-Date # Exportamos todo a un fichero log $log3 = Write-Output "$hora3, no hay procesos que cerrar" Add-Content $log3 -Path "c:\script\log\matar-procesos.log" Write-Output "##############NO HAY PROCESOS A CERRAR########" Write-Output "$hora3, no hay procesos que cerrar" Write-Output "##########FIN PROCESOS CERRADOS###############" #Liberamos variables para nueva ejecucion Remove-Variable 60segundos Remove-Variable Procs } # Parar la escritura del log # Stop-Transcript |
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?