Cómo consultar el estado de Restaurar sistema con PowerShell para profesionales de TI

¿Quieres aprender a consultar el estado de Restaurar sistema con PowerShell? Restaurar sistema es una función esencial en los sistemas operativos Windows, que proporciona una red de seguridad a los usuarios al permitirles revertir su sistema a un estado anterior en caso de mal funcionamiento o cambios no deseados.

Para los profesionales de TI y los proveedores de servicios gestionados (MSP), supervisar el estado de restauración del sistema en varios dispositivos es esencial para mantener el correcto estado y la fiabilidad del sistema. El script PowerShell proporcionado es una potente herramienta diseñada para comprobar el estado de restauración del sistema en un dispositivo y, opcionalmente, registrar el resultado en un campo personalizado.

Contexto

En un panorama en el que la estabilidad del sistema es primordial, la restauración del sistema ofrece un valioso servicio al permitir una rápida recuperación de los fallos del sistema. Para los profesionales de TI, especialmente los que gestionan numerosos dispositivos, asegurarse de que la restauración del sistema está activada puede evitar importantes tiempos de inactividad y pérdidas de datos.

Este script simplifica el proceso de verificación del estado de restauración del sistema y se integra perfectamente con NinjaOne, una popular solución de gestión de TI, para registrar el estado en un campo personalizado si es necesario.

El script

#Requires -Version 5.1

<#
.SYNOPSIS
    Checks the status of System Restore on the device.
.DESCRIPTION
    Checks the status of System Restore on the device.
    When a Custom Field is specified the results will be saved to the Custom Field as "Enabled" or "Disabled".

.EXAMPLE
    (No Parameters)
    ## EXAMPLE OUTPUT WITHOUT PARAMS ##
    [Info] System Restore is Disabled

PARAMETER: -CustomFieldName "SystemRestore"
    Saves the results to a custom field.
.EXAMPLE
    -CustomFieldName "SystemRestore"
    ## EXAMPLE OUTPUT WITH CustomFieldName ##
    [Info] Attempting to set Custom Field 'SystemRestore'.
    [Info] Successfully set Custom Field 'SystemRestore'!
    [Info] System Restore is Enabled

.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes: Renamed Script
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()]
    [String]$CustomFieldName
)

begin {
    function Set-NinjaProperty {
        [CmdletBinding()]
        Param(
            [Parameter(Mandatory = $True)]
            [String]$Name,
            [Parameter()]
            [String]$Type,
            [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
            $Value,
            [Parameter()]
            [String]$DocumentName
        )
    
        $Characters = $Value | Measure-Object -Character | Select-Object -ExpandProperty Characters
        if ($Characters -ge 10000) {
            throw [System.ArgumentOutOfRangeException]::New("Character limit exceeded, value is greater than 10,000 characters.")
        }
        
        # If we're requested to set the field value for a Ninja document we'll specify it here.
        $DocumentationParams = @{}
        if ($DocumentName) { $DocumentationParams["DocumentName"] = $DocumentName }
        
        # This is a list of valid fields that can be set. If no type is given, it will be assumed that the input doesn't need to be changed.
        $ValidFields = "Attachment", "Checkbox", "Date", "Date or Date Time", "Decimal", "Dropdown", "Email", "Integer", "IP Address", "MultiLine", "MultiSelect", "Phone", "Secure", "Text", "Time", "URL", "WYSIWYG"
        if ($Type -and $ValidFields -notcontains $Type) { Write-Warning "$Type is an invalid type! Please check here for valid types. https://ninjarmm.zendesk.com/hc/en-us/articles/16973443979789-Command-Line-Interface-CLI-Supported-Fields-and-Functionality" }
        
        # The field below requires additional information to be set
        $NeedsOptions = "Dropdown"
        if ($DocumentName) {
            if ($NeedsOptions -contains $Type) {
                # We'll redirect the error output to the success stream to make it easier to error out if nothing was found or something else went wrong.
                $NinjaPropertyOptions = Ninja-Property-Docs-Options -AttributeName $Name @DocumentationParams 2>&1
            }
        }
        else {
            if ($NeedsOptions -contains $Type) {
                $NinjaPropertyOptions = Ninja-Property-Options -Name $Name 2>&1
            }
        }
        
        # If an error is received it will have an exception property, the function will exit with that error information.
        if ($NinjaPropertyOptions.Exception) { throw $NinjaPropertyOptions }
        
        # The below types require values not typically given in order to be set. The below code will convert whatever we're given into a format ninjarmm-cli supports.
        switch ($Type) {
            "Checkbox" {
                # While it's highly likely we were given a value like "True" or a boolean datatype it's better to be safe than sorry.
                $NinjaValue = [System.Convert]::ToBoolean($Value)
            }
            "Date or Date Time" {
                # Ninjarmm-cli expects the GUID of the option to be selected. Therefore, the given value will be matched with a GUID.
                $Date = (Get-Date $Value).ToUniversalTime()
                $TimeSpan = New-TimeSpan (Get-Date "1970-01-01 00:00:00") $Date
                $NinjaValue = $TimeSpan.TotalSeconds
            }
            "Dropdown" {
                # Ninjarmm-cli is expecting the guid of the option we're trying to select. So we'll match up the value we were given with a guid.
                $Options = $NinjaPropertyOptions -replace '=', ',' | ConvertFrom-Csv -Header "GUID", "Name"
                $Selection = $Options | Where-Object { $_.Name -eq $Value } | Select-Object -ExpandProperty GUID
        
                if (-not $Selection) {
                    throw [System.ArgumentOutOfRangeException]::New("Value is not present in dropdown")
                }
        
                $NinjaValue = $Selection
            }
            default {
                # All the other types shouldn't require additional work on the input.
                $NinjaValue = $Value
            }
        }
        
        # We'll need to set the field differently depending on if its a field in a Ninja Document or not.
        if ($DocumentName) {
            $CustomField = Ninja-Property-Docs-Set -AttributeName $Name -AttributeValue $NinjaValue @DocumentationParams 2>&1
        }
        else {
            $CustomField = Ninja-Property-Set -Name $Name -Value $NinjaValue 2>&1
        }
        
        if ($CustomField.Exception) {
            throw $CustomField
        }
    }
    if ($env:customFieldName -and $env:customFieldName -ne "null") {
        $CustomFieldName = $env:customFieldName
    }
}
process {
    # If the registry value is 1, System Restore is enabled.
    $RegValue = Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\" -Name "RPSessionInterval" -ErrorAction SilentlyContinue

    $SystemRestoreStatus = if ($RegValue -ge 1) {
        # If either of the above conditions are met, System Restore is enabled.
        Write-Output "Enabled"
    }
    else {
        Write-Output "Disabled"
    }

    # If a Custom Field Name is provided, set the Custom Field with the System Restore Status.
    if ($CustomFieldName) {
        try {
            Write-Host "[Info] Attempting to set Custom Field '$CustomFieldName'."
            Set-NinjaProperty -Name $CustomFieldName -Value $SystemRestoreStatus
            Write-Host "[Info] Successfully set Custom Field '$CustomFieldName'!"
        }
        catch {
            Write-Host "[Error] Failed to set Custom Field '$CustomFieldName'."
        }
    }
    Write-Host "[Info] System Restore is $SystemRestoreStatus"
}
end {
    
    
    
}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

Veamos cómo funciona este script PowerShell.

Inicialización del script

El script comienza con algunos metadatos en forma de comentarios, detallando su propósito, ejemplos de uso y sistemas operativos soportados. Es compatible con Windows 10 y Windows Server 2016, lo que indica que está diseñado para entornos modernos.

Esta línea especifica que el script requiere PowerShell versión 5.1 o superior.

Parámetros

El script define un único parámetro opcional, CustomFieldName, que permite a los usuarios especificar un nombre de campo personalizado donde se guardará el estado.

Función auxiliar: Set-NinjaProperty

El script incluye una función de ayuda, Set-NinjaProperty, que es responsable de establecer el valor del campo personalizado en NinjaOne. Esta función maneja varios tipos de datos y valida las entradas según criterios predefinidos.

Lógica principal

A continuación, el script comprueba el registro para determinar si Restaurar sistema está activado. Lee el valor RPSessionInterval de la clave de registro HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore. Si el valor es mayor o igual a 1, se considera que Restaurar sistema está activado.

Si se proporciona un nombre de campo personalizado, el script intenta establecer este campo con el estado de Restaurar sistema mediante la función Set-NinjaProperty.

Posibles casos de uso

Imagina a un profesional de TI que gestiona una flota de dispositivos Windows para una empresa mediana. Asegurarse de que Restaurar sistema está activado en todos los dispositivos es crucial para recuperarse rápidamente de posibles problemas. El profesional puede utilizar este script en combinación con NinjaOne para comprobar y registrar regularmente el estado de Restaurar sistema en todos los dispositivos, asegurándose de que puede actuar con rapidez si la función se desactiva en alguna máquina.

Comparaciones

Existen varios métodos para comprobar el estado de Restaurar sistema, como utilizar la interfaz gráfica de usuario o diferentes utilidades de línea de comandos. Sin embargo, este script PowerShell ofrece un enfoque racionalizado y automatizado que se integra con NinjaOne, proporcionando una solución escalable para los profesionales de TI que gestionan múltiples sistemas. A diferencia de las comprobaciones manuales, este script puede programarse y ejecutarse en todos los dispositivos, lo que ahorra tiempo y reduce los errores humanos.

FAQ

P: ¿Este script puede activar Restaurar sistema si está desactivado?

R: No, el script está diseñado para comprobar el estado de Restaurar Sistema y registrarlo. Activar Restaurar sistema requeriría comandos adicionales.

P: ¿Es compatible el script con versiones anteriores de Windows?

R: El script está diseñado para Windows 10 y Windows Server 2016. No se garantiza la compatibilidad con versiones anteriores.

P: ¿Qué ocurre si no se indica el nombre del campo personalizado?

R: Si no se proporciona ningún nombre de campo personalizado, el script simplemente muestra el estado de Restaurar sistema sin intentar registrarlo.

Implicaciones

Conocer el estado de Restaurar sistema en todos los dispositivos gestionados ayuda a los profesionales de TI a garantizar que los sistemas puedan recuperarse en caso de fallos. Este enfoque proactivo puede mejorar significativamente la fiabilidad del sistema y reducir el impacto de posibles problemas.

Recomendaciones

Cuando utilices este script, asegúrate de que se ejecuta regularmente para controlar el estado de Restaurar sistema. Intégralo en una estrategia más amplia de supervisión y gestión para mantener el sistema en buen estado. Prueba siempre el script en un entorno controlado antes de desplegarlo en varios dispositivos para evitar problemas inesperados.

Reflexiones finales

NinjaOne ofrece sólidas herramientas para la gestión de TI, y scripts como éste mejoran sus capacidades proporcionando soluciones automatizadas y escalables para comprobaciones rutinarias. Asegurarse de que la restauración del sistema está activada en todos los dispositivos es sólo una de las muchas tareas que se pueden agilizar con NinjaOne, ayudando a los profesionales de TI a mantener la integridad del sistema, la fiabilidad y la eficiencia.

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).