measuring-reboot-time-with-powershell

Messen der Neustart-Zeit mithilfe von PowerShell

Messen der Neustart-Zeit mithilfe von PowerShell

In Unternehmensumgebungen gibt es in der Regel eine Vielzahl verschiedener Windows-Betriebssysteme, Hardware- und natürlich auch Software-Produkte. Normalerweise werden Geräte mit einer Gruppenrichtlinie und SCCM verwaltet und konfiguriert, oder vielleicht auch mit moderneren Methoden wie Chef oder Puppet. Eines der Symptome eines fehlerhaften Windows-Computer ist die Zeit, die der Computer zum Hochfahren benötigt.


Längere Startzeiten können auf einen Hardware-Fehler hinweisen, wie z. B. langsame Festplatten. Vielleicht verzögert auch eine Gruppenrichtlinie den Prozess, zum Anmeldebildschirm zu gelangen. In diesem Artikel zeige ich Ihnen, wie Sie mithilfe von PowerShell die Anzahl der Sekunden ermitteln können, die ein Computer zum Herunter- und Hochfahren benötigt.

Die Funktion Measure-RebootTime

Vor einiger Zeit hatten wir eine Reihe von Geräten, über die sich Benutzer beschwerten. Das Problem bestand darin, dass bestimmte Geräte sehr lange zum Hochfahren brauchten, manchmal sogar 15 Minuten. Da diese Geräte weder zu bestimmten Uhrzeiten noch an bestimmten Tagen verwendet werden, habe ich eine PowerShell-Funktion erstellt, um eine Gerätegruppe neu zu starten und ihre Zeit zum Hochfahren zu messen. Aus diesem Grund habe ich die Funktion Measure-RebootTime erstellt, die eine Helferfunktion Get-RebootTime umfasst.

 

Die Funktion Get-RebootTime selbst ist sehr einfach. Sie verwendet Measure-Command zum Messen mithilfe von Restart-Computer und wartet gleichzeitig darauf, dass PowerShell (WMI) für eine Remote-Verbindung verfügbar wird. Ich habe außerdem eine Zeitüberschreitung von 1200 Sekunden festgelegt. Dann runde ich die Sekunden auf zwei Dezimalstellen und füge das Ganze in einem PSCustomObject hinzu.

$Time = Measure-Command {

    Restart-Computer -ComputerName $ComputerName -Wait -For powershell -Timeout 1200 -ErrorAction Stop

} | Select-Object -ExpandProperty TotalSeconds

$RoundedTime = [math]::Round($Time,2)

[PSCustomObject]@{

    ComputerName = $ComputerName

    Seconds = $RoundedTime

}

Nachdem ich Get-RebootTime erstellt hatte, überlegte ich, dass mehrere Computer gleichzeitig verarbeitet werden sollten. Deshalb habe ich die Funktion Measure-RebootTime hinzugefügt, die PoshRSJob verwendet, um mehrere Geräte in Jobs zu verarbeiten. PoshRSJob ist ein sehr nützliches, von Bo Prox geschriebenes PowerShell Community-Modul, das häufig zur Nutzung von PowerShell-Ausführungsbereichen verwendet wird.

#requires -modules PoshRSJob

function Measure-RebootTime {

    [CmdletBinding()]

    param(

        [Parameter(Mandatory=$true)]

        [string[]]$ComputerName

    )

    $ComputerName | Start-RSJob -ScriptBlock {Get-RebootTime -ComputerName $_ } -Throttle 150 | Wait-RSJob | Get-RSJob | Receive-RSJob | Select-Object *

}

Das Testen

Ich habe also in diesem Beispiel zwei Geräte, Test-1 und Test-2, bei denen ich die Sekunden messen möchte, die sie zum Hochfahren benötigen. Ich kann beide einfach zu dem Parameter -ComputerName in Measure-RebootTime hinzufügen.

C:\> Measure-RebootTime -ComputerName Test-1,Test-2




ComputerName Seconds

------------ -------

Test-1       51

Test-2       50




Wie wir sehen, enthält das zurückgegebene Objekt den Computernamen und die Anzahl der Sekunden, die für das Hochfahren sowie das Ermöglichen des Zugriffs auf WMI über das Netzwerk benötigt wurden. Selbstverständlich kann der Benutzer selbst entscheiden, wie viel Zeit für den Neustart eines bestimmten Geräts akzeptabel ist. In diesem Fall waren es jeweils 50 Sekunden.

Zusammenfassung

Die richtig schlauen dieser PowerShell-Funktionen sind Measure-Command, Restart-Computer und Start-RSJob. Alle zusammen in Kombination können diese Aufgabe sehr effizient und einfach erledigen, ohne dass viel Code oder Komplexität anfällt. Ich habe die Verwendung von integrierten PowerShell-Modulen und Community-Modulen in meine Skripte aufgenommen und dadurch beim Schreiben von Funktionen eine Menge Zeit eingespart.

Tipp: Lesen Sie dazu auch das Whitepaper Automatisieren mit PowerShell oder laden Sie sich kostenfrei eine Testversion von MOVEit Automation, Software für die Automatisierung der Dateiübertragung, herunter.

Zusammenhängende Posts


Kommentare
Comments are disabled in preview mode.
Loading animation