<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1678611822423757&amp;ev=PageView&amp;noscript=1">
Defrag This

| Read. Reflect. Reboot.

Messen der Neustart-Zeit mithilfe von PowerShell

Dan Franciscus| October 30 2019

| IT insights, Sysadmin

measuring-reboot-time-with-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.

Automate Using PowerShell

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.

Topics: IT insights, Sysadmin

Leave a Reply

Your email address will not be published. Required fields are marked *

THIS POST WAS WRITTEN BY Dan Franciscus

Dan Franciscus is a systems engineer and VMware Certified Professional (VCP) specializing in VMware, PowerShell, and other Microsoft-based technologies. You can reach Dan at his blog (http://www.winsysblog.com/) or Twitter at @dan_franciscus.

Free Trials

Getting started has never been easier. Download a trial today.

Download Free Trials

Contact Us

Let us know how we can help you. Focus on what matters. 

Send us a note

Subscribe to our Blog

Let’s stay in touch! Register to receive our blog updates.