Die wichtigsten Erkenntnisse
- Automatisiert den Abruf des Installationsdatums: Das Skript ermittelt effizient das Installationsdatum des Windows-Betriebssystems und automatisiert damit, was sonst eine manuelle und zeitaufwändige Aufgabe wäre.
- Nutzt mehrere Datenquellen: Es ruft Installationsdaten aus der Registrierung, Systeminformationen, WMI und Get-ComputerInfo von PowerShell ab und gewährleistet so eine umfassende Datensammlung.
- Bietet eine benutzerdefinierte Feldausgabe: Der optionale Parameter CustomField ermöglicht die Integration in bestehende Datensysteme, indem das Installationsdatum in einem bestimmten Feld gespeichert wird.
- Unterstützt die wichtigsten Windows-Versionen: Entwickelt für Windows 10 und Windows Server 2016, was es für die meisten modernen Windows-Umgebungen relevant macht.
- Mechanismen zur Fehlerbehandlung: Enthält try-catch-Blöcke für jede Methode des Datenabrufs, damit das Skript reibungslos und ohne Unterbrechungen läuft.
- Erleichtert die IT-Verwaltung und -Sicherheit: Hilft IT-Fachleuten, veraltete Systeme zu erkennen, was für die Wartung und die Einhaltung von Sicherheitsvorschriften entscheidend ist.
- Integration mit Verwaltungsplattformen: Die Funktionalität des Skripts verdeutlicht die Vorteile der Integration solcher Tools in Plattformen wie NinjaOne für ein umfassendes Systemmanagement.
Im dynamischen Bereich der Informationstechnologie ist die effiziente Verwaltung von Systeminformationen von entscheidender Bedeutung. PowerShell-Skripte haben sich bei der Vereinfachung komplexer Aufgaben bewährt, da sie Daten automatisieren und genau abrufen können. Ein bemerkenswertes Beispiel ist ein Skript, mit dem das Installationsdatum eines Windows-Betriebssystems ermittelt werden kann. Diese Fähigkeit ist nicht nur eine Frage der Aufzeichnung, sondern ein wesentlicher Aspekt der Systemverwaltung und -sicherheit.
Hintergrund
Das fragliche Skript erfüllt eine wichtige Funktion für IT-Experten und Managed Service Provider (MSPs). Es wurde entwickelt, um das Installationsdatum des Windows-Betriebssystems auf einem Computer zu ermitteln. Diese Informationen sind aus verschiedenen Gründen wichtig, z. B. für die Einhaltung von Vorschriften, die Planung von Wartungsarbeiten und die Sicherheitsprüfung. Da IT-Umgebungen immer komplexer werden, ist ein Skript, das diese Aufgabe automatisiert, von unschätzbarem Wert.
Das Skript:
#Requires -Version 5.1 <# .SYNOPSIS Fetches the install date. Outputs to the activity feed and can store it in a custom field. .DESCRIPTION Fetches the install date. Outputs to the activity feed and can store it in a custom field. .EXAMPLE (No Parameters) ## EXAMPLE OUTPUT WITHOUT PARAMS ## Install Date: 08/18/2021 13:50:15 PARAMETER: -CustomField "InstallDate" A custom field to save the install date to. .EXAMPLE -CustomField "InstallDate" ## EXAMPLE OUTPUT WITH CustomField ## Install Date: 08/18/2021 13:50:15 .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 10, Windows Server 2016 Release Notes: Renamed script and added Script Variable support 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 ( [string]$CustomField ) begin { $Epoch = [DateTime]'1/1/1970' if ($env:customFieldName -and $env:customFieldName -notlike "null") { $CustomField = $env:customFieldName } Write-Host "" } process { $InstallDate = $( try { # Get Install Date from registry Get-ChildItem -Path "HKLM:\System\Setup\Source*" -ErrorAction SilentlyContinue | ForEach-Object { $InstallDate = Get-ItemPropertyValue -Path Registry::$_ -Name "InstallDate" -ErrorAction SilentlyContinue [System.TimeZone]::CurrentTimeZone.ToLocalTime(($Epoch).AddSeconds($InstallDate)) } $InstallDateCu = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name "InstallDate" -ErrorAction SilentlyContinue [System.TimeZone]::CurrentTimeZone.ToLocalTime(($Epoch).AddSeconds($InstallDateCu)) } catch { # Skip if errors } try { # Get Install date from system info $SystemInfo = systeminfo.exe # --- Output of system info --- # Original Install Date: 9/3/2020, 8:54:48 AM $($SystemInfo | Select-String "install date") -split 'Date:\s+' | Select-Object -Last 1 | Get-Date } catch { # Skip if errors } try { # Get Install date from WMI $(Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue).InstallDate } catch { # Skip if errors } try { if ($PSVersionTable.PSVersion.Major -ge 5 -and $PSVersionTable.PSVersion.Minor -ge 1) { $ComputerInfo = Get-ComputerInfo -Property WindowsInstallDateFromRegistry, OsInstallDate -ErrorAction SilentlyContinue $ComputerInfo.WindowsInstallDateFromRegistry $ComputerInfo.OsInstallDate } } catch { # Skip if errors } ) | Sort-Object | Select-Object -First 1 if ($InstallDate) { if ($CustomField) { Ninja-Property-Set -Name $CustomField -Value $InstallDate } Write-Host "Install Date: $InstallDate" } else { if ($CustomField) { Ninja-Property-Set -Name $CustomField -Value "Unknown" } Write-Host "Install Date: Unknown" } } end { }
Zugriff auf über 300 Skripte im NinjaOne Dojo
Detaillierte Aufschlüsselung
Das Skript arbeitet in mehreren Stufen:
- Definition der Parameter: Sie beginnt mit der Definition eines optionalen Parameters CustomField. Hier kann der Benutzer ein benutzerdefiniertes Feld angeben, in dem das Installationsdatum gespeichert werden soll.
- Initialisierung: Es initialisiert eine Variable, die die Unix-Epoche (1. Januar 1970) als Basis für Datumsberechnungen darstellt.
- Prozess des Datenabrufs: Das Skript verwendet dann mehrere Methoden, um das Installationsdatum zu ermitteln:
- Registry-Einträge: Prüft mehrere Registrierungspfade auf das Installationsdatum und konvertiert den Unix-Zeitstempel in ein lokales Zeitformat.
- System Info Utility: Extrahiert das Installationsdatum aus der Ausgabe des Befehls systeminfo.exe.
- Windows-Verwaltungsinstrumentierung (WMI): Ruft das Installationsdatum aus der Klasse Win32_OperatingSystem ab.
- Computerinfo (für PowerShell 5.1 und höher): Verwendet das Cmdlet “ Get-ComputerInfo“ zum Abrufen von Installationsdaten.
- Datenauswahl und -ausgabe: Aus den gesammelten Daten wählt es das früheste als das wahrscheinlichste ursprüngliche Installationsdatum aus und gibt es entweder aus oder setzt es in ein angegebenes benutzerdefiniertes Feld.
Mögliche Anwendungsfälle
Stellen Sie sich einen IT-Administrator vor, der eine Flotte von Computern in einer großen Organisation verwaltet. Durch die Ausführung dieses Skripts können sie schnell feststellen, auf welchen Rechnern ältere Installationen laufen, und diese möglicherweise für Aktualisierungen oder tiefer gehende Sicherheitsüberprüfungen vormerken.
Vergleiche
Herkömmliche Methoden wie das manuelle Überprüfen von Systemeigenschaften oder das Durchsuchen von Systemprotokollen sind zeitaufwändig und anfällig für menschliche Fehler. Dieses Skript automatisiert und zentralisiert den Prozess und macht ihn sowohl schneller als auch zuverlässiger.
FAQs
- Wie wird das Skript ausgeführt?
Führen Sie es in einer PowerShell-Umgebung aus und geben Sie optional ein CustomField für die Ausgabe an. - Kann es auf allen Windows-Versionen funktionieren?
Es ist für Windows 10 und Windows Server 2016 und höher konzipiert. - Ist sie fehlerfrei?
Das Skript enthält mehrere try-catch-Blöcke, um eventuelle Fehler während der Ausführung zu beheben.
Auswirkungen
Die genaue Kenntnis des Installationsdatums des Betriebssystems ist entscheidend für die Einhaltung von Sicherheitsvorschriften und die Systemwartung. Veraltete Systeme können ein Sicherheitsrisiko darstellen, und dieses Skript hilft bei der Identifizierung solcher Systeme für notwendige Aktualisierungen.
Empfehlungen
- Testen Sie Skripte immer in einer kontrollierten Umgebung, bevor Sie sie in einer Produktionsumgebung einsetzen.
- Passen Sie den Parameter CustomField für eine nahtlose Integration an die Datenstruktur Ihres Unternehmens an.
Abschließende Überlegungen
Dieses Skript ist ein Beispiel dafür, wie Tools wie NinjaOne den IT-Betrieb verbessernkönnen. Die Plattform von NinjaOne könnte solche Skripte für ein breiteres Systemmanagement integrieren und so eine umfassende Lösung bieten, die den IT-Betrieb rationalisiert und sicherstellt, dass die Systeme auf dem neuesten Stand und sicher sind. Der Einsatz von PowerShell-Skripten in solchen Plattformen bringt Effizienz und Genauigkeit in den Vordergrund der IT-Verwaltung.