Wie IT-Expert:innen den Status der Systemwiederherstellung mit PowerShell abrufen

Möchten Sie erfahren, wie Sie das Abrufen vom Status der Systemwiederherstellung mit PowerShell automatisieren können? Die Systemwiederherstellung ist eine wichtige Funktion in Windows-Betriebssystemen, die Benutzer:innen ein Sicherheitsnetz bietet, indem sie es ihnen ermöglicht, ihr System im Falle von Fehlfunktionen oder unerwünschten Änderungen auf einen früheren Zustand zurückzusetzen.

Für IT-Expert:innen und Managed Service Provider (MSPs) ist die Überwachung des Status der Systemwiederherstellung über mehrere Geräte hinweg für die Aufrechterhaltung des Systemzustands und der -zuverlässigkeit unerlässlich. Das mitgelieferte PowerShell-Skript ist ein leistungsfähiges Tool, mit dem der Status der Systemwiederherstellung auf einem Gerät überprüft und das Ergebnis optional in einem benutzerdefinierten Feld gespeichert werden kann.

Kontext

In einer Umgebung, in der die Systemstabilität von größter Bedeutung ist, bietet die Systemwiederherstellung einen wertvollen Dienst, da sie eine schnelle Wiederherstellung nach Systemfehlern möglich macht. IT-Expert:innen, insbesondere diejenigen, die zahlreiche Geräte verwalten, sollten sicherstellen, dass die Systemwiederherstellung aktiviert ist, um erhebliche Ausfallzeiten und Datenverluste zu vermeiden.

Dieses Skript vereinfacht die Überprüfung vom Status der Systemwiederherstellung und lässt sich nahtlos in NinjaOne, eine beliebte IT-Management-Lösung, integrieren, um den Status bei Bedarf in einem benutzerdefinierten Feld zu protokollieren.

Das Skript zum Abrufen vom Status der Systemwiederherstellung

#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 {
    
    
    
}

 

Greifen Sie auf über 300 Skripte im NinjaOne Dojo zu.

Zugang erhalten

Detailansicht

Sehen wir uns nun an, wie dieses PowerShell-Skript funktioniert.

Skript-Initialisierung

Das Skript beginnt mit einigen Metadaten in Form von Kommentaren, in denen der Zweck, Anwendungsbeispiele und unterstützte Betriebssysteme beschrieben werden. Es unterstützt Windows 10 sowie Windows Server 2016 und ist somit für moderne Umgebungen konzipiert.

Diese Zeile gibt an, dass das Skript PowerShell Version 5.1 oder höher benötigt.

Parameter

Das Skript definiert einen einzigen optionalen Parameter, CustomFieldName, mit dem Benutzer:innen einen benutzerdefinierten Feldnamen angeben können, in dem der Status gespeichert wird.

Hilfsfunktion: Set-NinjaProperty

Das Skript enthält eine Hilfsfunktion, Set-NinjaProperty, die für das Setzen des Wertes vom benutzerdefinierten Feld in NinjaOne verantwortlich ist. Diese Funktion verarbeitet verschiedene Datentypen und prüft die Eingaben anhand vordefinierter Kriterien.

Hauptlogik

Das Skript überprüft dann die Registrierung, um festzustellen, ob die Systemwiederherstellung aktiviert ist. Er liest den Wert RPSessionInterval aus dem Registrierungsschlüssel HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore. Wenn der Wert größer oder gleich 1 ist, gilt die Systemwiederherstellung als aktiviert.

Wenn ein benutzerdefinierter Feldname angegeben wird, versucht das Skript, dieses Feld mit der Funktion Set-NinjaProperty auf den Systemwiederherstellungs-Status zu setzen.

Potenzielle Anwendungsfälle

Stellen Sie sich vor, ein IT-Experte verwaltet eine Vielfalt von Windows-Geräten für ein mittelständisches Unternehmen. Die Aktivierung der Systemwiederherstellung auf allen Geräten ist entscheidend für die schnelle Wiederherstellung bei möglichen Problemen. Der Experte kann dieses Skript in Verbindung mit NinjaOne verwenden, um den Status der Systemwiederherstellung auf allen Geräten regelmäßig zu überprüfen und zu protokollieren. So kann er schnell handeln, wenn die Funktion auf einem Gerät deaktiviert ist.

Vergleiche

Es gibt verschiedene Methoden, um den Status der Systemwiederherstellung zu überprüfen, zum Beispiel über die grafische Benutzeroberfläche oder verschiedene Befehlszeilen-Dienstprogramme. Dieses PowerShell-Skript bietet jedoch einen rationalisierten, automatisierten Ansatz, der in NinjaOne integriert ist und eine skalierbare Lösung für IT-Expert:innen darstellt, die mehrere Systeme verwalten. Im Gegensatz zu manuellen Prüfungen kann dieses Skript geplant und geräteübergreifend ausgeführt werden, was Zeit spart und das Risiko menschlichen Versagens reduziert.

FAQs

F: Kann dieses Skript die Systemwiederherstellung aktivieren, wenn sie deaktiviert ist?

A: Nein, das Skript dient dazu, den Status der Systemwiederherstellung zu überprüfen und zu protokollieren. Die Aktivierung der Systemwiederherstellung würde zusätzliche Befehle erfordern.

F: Ist das Skript mit älteren Versionen von Windows kompatibel?

A: Das Skript ist für Windows 10 und Windows Server 2016 konzipiert. Die Kompatibilität mit älteren Versionen ist nicht gewährleistet.

F: Was geschieht, wenn der Name des benutzerdefinierten Feldes nicht angegeben wird?

A: Wenn kein benutzerdefinierter Feldname angegeben wird, gibt das Skript einfach den Status der Systemwiederherstellung aus, ohne zu versuchen, ihn zu protokollieren.

Folgen

Durch die Kenntnis vom Status der Systemwiederherstellung auf allen verwalteten Geräten können IT-Expert:innen sicherstellen, dass die Systeme im Falle eines Ausfalls wiederherstellbar sind. Dieser proaktive Ansatz kann die Zuverlässigkeit des Systems erheblich verbessern und die Auswirkungen potenzieller Probleme verringern.

Empfehlungen

Wenn Sie dieses Skript verwenden, stellen Sie sicher, dass es regelmäßig ausgeführt wird, um den Status der Systemwiederherstellung im Auge zu behalten. Integrieren Sie es in eine umfassendere Systemüberwachungs- und -verwaltungsstrategie, um den gesunden Systemzustand zu erhalten. Testen Sie das Skript immer in einer kontrollierten Umgebung, bevor Sie es auf mehreren Geräten einsetzen, um unerwartete Probleme zu vermeiden.

Abschließende Überlegungen

NinjaOne bietet robuste Tools für das IT-Management, und Skripte wie dieses erweitern die Möglichkeiten, indem sie automatisierte, skalierbare Lösungen für Routineprüfungen bieten. Die Sicherstellung, dass die Systemwiederherstellung geräteübergreifend aktiviert ist, ist nur eine von vielen Aufgaben, die mit NinjaOne rationalisiert werden können. IT-Expert:innen werden durch die Integration von NinjaOne geholfen, die Systemintegrität, Zuverlässigkeit und Effizienz zu erhalten.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).