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