Cómo gestionar y reiniciar los servicios de TeamViewer mediante PowerShell

En la gestión de TI, garantizar la continuidad y funcionalidad de los servicios esenciales es crucial. TeamViewer, una popular herramienta de asistencia remota, a menudo necesita estar operativa en todo momento. Sin embargo, los servicios pueden interrumpirse ocasionalmente, lo que exige una actuación rápida para restablecerlos. Este post profundiza en un script PowerShell diseñado para gestionar y reiniciar los servicios de TeamViewer de forma eficiente, garantizando un tiempo de inactividad mínimo y la máxima productividad.

Contexto

Los scripts de PowerShell son herramientas muy valiosas para los profesionales de TI y los proveedores de servicios gestionados (MSP). Automatizan las tareas rutinarias, refuerzan la coherencia y reducen las posibilidades de error humano. El script que veremos hoy se centra en reiniciar los servicios de TeamViewer.

Dado su papel en la asistencia remota, cualquier tiempo de inactividad puede afectar significativamente a la prestación del servicio. Este script no sólo reinicia el servicio TeamViewer, sino que también incluye mecanismos para volver a activarlo si se ha desactivado, lo que lo convierte en una herramienta versátil en el arsenal de un profesional de TI.

El script para reiniciar los servicios de TeamViewer

#Requires -Version 5.1

<#
.SYNOPSIS
    Restarts the TeamViewer Service. Use "Set to Automatic" if the service was disabled.
.DESCRIPTION
    Restarts the TeamViewer Service. Use "Set to Automatic" if the service was disabled.
.EXAMPLE
    (No Parameters)
    
    Status   Name               DisplayName                           
    ------   ----               -----------                           
    Running  TeamViewer         TeamViewer                            
    Attempt 1 has completed!
    TeamViewer has restarted successfully!

PARAMETER: -Enable
    Re-Enables disabled TeamViewer services.

PARAMETER: -Attempts "7" 
    Overrides the number of attempts the script will make to restart the service. Simply replace 7 with your desired number of attempts.

PARAMETER: -WaitTimeInSecs "30"
    Overrides the amount of time in between attempts. Defaults to 15.

.NOTES
    Minimum OS Architecture Supported: Windows 10, Server 2016
    Release Notes: Initial release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]    
    [Switch]$Enable = [System.Convert]::ToBoolean($env:setToAutomatic),
    [Parameter()]
    [int]$Attempts = 3,
    [Parameter()]
    [int]$WaitTimeInSecs = 15
)

begin {
    if ($env:attempts -and $env:attempts -notlike "null") { $Attempts = $env:attempts }
    if ($env:waitTimeInSeconds -and $env:waitTimeInSeconds -notlike "null") { $WaitTimeInSecs = $env:waitTimeInSeconds }

    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    # Grabs initial set of services to try once.
    $ServiceList = Get-CimInstance -ClassName "win32_service"

    # Attempts to find the TeamViewer service using its executable name.
    function Find-Service {
        [CmdletBinding()]
        param(
            [Parameter(ValueFromPipeline)]
            [String]$Name
        )
        process {
            $ServiceList | Where-Object { $_.PathName -Like "*$Name.exe*" } 
        }
    }

    # Tests if the service was successful
    function Test-Service {
        [CmdletBinding()]
        param(
            [Parameter(ValueFromPipeline)]
            [String]$Name
        )
        process {
            $Running = Get-Service $Name | Where-Object { $_.Status -eq $Running }
            if ($Running) {
                return $True
            }
            else {
                return $False
            }
        }
    }

    # Name of each TeamViewer exe.
    $ProcessName = "TeamViewer", "TeamViewer_Service", "tv_w32", "tv_x64"
}
process {
    if (-not (Test-IsElevated)) {
        Write-Host "[Error] Access Denied. Please run with Administrator privileges."
        exit 1
    }

    # List of services to try
    $Services = $ProcessName | Find-Service

    # If no TeamViewer service is found
    if (-not $Services) {
        Write-Host "[Error] TeamViewer appears to be missing its service. You will need to reinstall it."
        exit 1
    }

    # Loops through each service and attempts to start them
    foreach ($Service in $Services) {
        $Failed = $True
        $Attempt = 1
        While ($Attempt -le $Attempts -and $Failed -eq $True) {

            # If the service was disabled, check if -Enable was specified.
            if ($Service.StartMode -ne "Auto" -and $Enable) {
                # If so re-enable it.
                $Service | Get-Service | Set-Service -StartupType "Automatic"
            }
            elseif ($Service.StartMode -ne "Auto") {
                Write-Host "[Error] The service is not set to start automatically. Use 'Set To Automatic' to change the startup type to automatic."
                if($Service.StartMode -eq "Disabled"){ exit 1 }
            }

            # All possible service states
            Switch ($Service.State) {
                "Running" { $Service | Get-Service | Restart-Service -PassThru }
                "Paused" { $Service | Get-Service | Resume-Service -PassThru }
                "Pending" {
                    $Service | Get-Service | Stop-Service
                    Start-Sleep -Seconds 2  # Ensure the service has time to stop
                    $Service | Get-Service | Start-Service -PassThru
                }
                "Stopped" { $Service | Get-Service | Start-Service -PassThru }
            }

            Start-Sleep -Seconds $WaitTimeInSecs

            # Feedback on the number of attempts made. Multiple attempts may indicate that TeamViewer needs to be reinstalled.
            Write-Host "Attempt $Attempt completed."

            $Attempt++
            $Failed = $Service.Name | Test-Service
        }
    }
    $Failed = $Services | Get-Service | Where-Object { $_.Status -ne "Running" }

    if ($Failed) {
        Write-Host "[Error] Unable to start the service!"
        exit 1
    }
    else {
        Write-Host "TeamViewer has restarted successfully!"
        exit 0
    }
}
end {
    
    
    
}

 

Análisis detallado

La función principal del script es reiniciar los servicios de TeamViewer, con funcionalidades añadidas para configurar el servicio para que se inicie automáticamente si está deshabilitado y para personalizar el número de intentos de reinicio y los periodos de espera entre intentos.

Componentes clave

 1. Parámetros e inicialización

El script para reiniciar los servicios de TeamViewer comienza definiendo los parámetros: $Enable, $Attempts y $WaitTimeInSecs. Estos parámetros permiten la personalización, haciendo que el script se adapte a diferentes escenarios.

2. Comprobación de elevación

El script para reiniciar los servicios de TeamViewer incluye una función para comprobar si se está ejecutando con privilegios de administrador, lo cual es necesario para las tareas de gestión de servicios.

3. Descubrimiento de servicios

Recupera una lista de todos los servicios y los filtra para encontrar los relacionados con TeamViewer.

4. Comprobación del estado del servicio

Otra función verifica si el servicio especificado se está ejecutando.

5. Bucle de gestión de servicios

El bucle intenta reiniciar los servicios de TeamViewer hasta el número de intentos especificado, haciendo una pausa entre los intentos según se defina.

Posibles casos de uso

Considera un escenario de soporte de TI en el que los servicios de TeamViewer en una máquina remota se detienen inesperadamente. Un profesional de TI puede utilizar este script para reiniciar los servicios de TeamViewer de forma remota, garantizando una interrupción mínima de las operaciones de soporte. Por ejemplo, durante una sesión de asistencia crítica, si el servicio se detiene, el script puede ejecutarse para volver a ponerlo en línea sin necesidad de intervención manual.

Comparaciones

Este script para reiniciar los servicios de TeamViewer ofrece un enfoque racionalizado en comparación con los reinicios manuales o el uso de otras herramientas como el Administrador de servicios de Windows. Mientras que este último requiere comprobaciones y reinicios manuales, este script automatiza el proceso, garantizando resoluciones coherentes y rápidas.

FAQ

P: ¿Qué ocurre si se desactiva el servicio?

R: El script para reiniciar los servicios de TeamViewer puede volver a activar el servicio si se utiliza el parámetro -Enable.

P: ¿Puedo ajustar el número de intentos de reinicio?

R: Sí, utiliza el parámetro -Attempts para especificar el número de intentos deseado.

P: ¿Qué ocurre si el script para reiniciar los servicios de TeamViewer no se ejecuta con privilegios de administrador?

R: El script comprueba la elevación y saldrá con un mensaje de error si no se ejecuta como administrador.

Implicaciones

Automatizar el reinicio de servicios críticos como TeamViewer reduce el tiempo de inactividad y mejora los tiempos de respuesta. Sin embargo, es esencial asegurarse de que este tipo de scripts se utilicen de forma responsable y con los permisos adecuados, ya que pueden interrumpir los servicios si están mal configuradas.

Recomendaciones

  • Haz pruebas en un entorno controlado: antes de desplegarlo en un entorno real, prueba el script para reiniciar los servicios de TeamViewer en una configuración controlada para asegurarte de que se comporta como se espera.
  • Supervisa el estado del servicio: utiliza herramientas de supervisión para realizar un seguimiento del estado de los servicios de TeamViewer y activa el script para reiniciar los servicios de TeamViewer automáticamente si se detectan problemas.
  • Mantén actualizado el script: asegúrate de que el script para reiniciar los servicios de TeamViewer se actualiza para dar cabida a cualquier cambio en los nombres de servicio o rutas ejecutables.

Reflexiones finales

El uso de scripts para gestionar servicios es una técnica poderosa para los profesionales de TI. Este script para reiniciar los servicios de TeamViewer en particular para reiniciar los servicios de TeamViewer muestra cómo la automatización puede mejorar la eficiencia y la fiabilidad. En cuanto a las soluciones de gestión de TI, NinjaOne proporciona una plataforma robusta que puede integrar dichos scripts, ofreciendo un conjunto completo de herramientas para gestionar el soporte remoto y las operaciones de TI de forma eficaz.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).