Die Computerverfügbarkeit mit PowerShell

0 Comments

Die Computerverfügbarkeit ist eine wichtige Statistik in der Systemverwaltung. Hier sind einige der Möglichkeiten, wie wir die Systemverfügbarkeit für einen Computer bestimmen können (beachten Sie, dass diese Liste keineswegs erschöpfend ist):

1. Auf der Registerkarte Leistung des Task-Managers wird die Betriebszeit des Computers als Tage, Stunden, Minuten und Sekunden angezeigt.

2. Das Befehlszeilentool Systeminfo zeigt die letzte Startzeit des Computers an.

3. Die letzte Ereignis-ID 6005 im Systemereignisprotokoll des Computers zeichnet die letzte Startzeit des Computers auf.

4., Die WMI Win32_OperatingSystem-Klasse verfügt über eine LastBootUpTime-Eigenschaft, die die letzte Startzeit des Computers enthält.

Jede dieser Techniken hat Ihre vor-und Nachteile. Beispielsweise bietet der Task-Manager eine schnelle Sichtbarkeit für die Betriebszeit eines einzelnen Computers, und das Ereignisprotokoll enthält zusätzliche Informationen zum 6005-Ereignis, die einen Einblick in einen Systemfehler geben können. Die ersten drei Optionen sind wahrscheinlich nicht die besten für Automatisierungszwecke (z. B. Abfragen einer Liste von Servern für die Betriebszeit), also schauen wir uns WMI an. Zunächst müssen wir uns jedoch ansehen, wie WMI Uptime-Informationen zurückgibt.,

Verwenden von WMI zum Abrufen der Computerverfügbarkeit

Es gibt verschiedene Möglichkeiten, die Betriebszeit eines Computers mithilfe von WMI abzurufen. Eine der offensichtlichsten Möglichkeiten vor Windows PowerShell war die Verwendung des WMIC-Befehls. Beispiel:

Dieser Befehl ruft die LastBootUpTime-Eigenschaft der Win32_operatingsystemklasseninstanz auf dem Computer ab., In PowerShell würden wir das Cmdlet Get-WmiObject anstelle von WMIC verwenden:

Probieren Sie diese Befehle selbst aus, und Sie werden sehen, dass die Ausgabe nicht unbedingt „benutzerfreundlich“ ist, da das in der Eigenschaft LastBootUpTime ausgedrückte Datum und die Uhrzeit als CIM-Datetime-Zeichenfolge (Common Information Model) formatiert sind. Zum Beispiel:

Diese datetime-Zeichenfolge übersetzt zu Können 12, 2016, 15:48:36 (3:48). 125599 ist die Anzahl der Mikrosekunden (wir werden diese ignorieren), und die -360 stellt die Anzahl der Minuten Offset von GMT., In diesem Beispiel bedeutet -360, dass die Zeit 6 Stunden hinter GMT liegt. (Ähnlich würde +180 „3 Stunden vor GMT bedeuten.“)

Um die CIM-Datetime-Zeichenfolge verwendbarer zu machen, müssen wir sie in ein verwendbares Datum (ein DateTime-Objekt) konvertieren. Glücklicherweise macht PowerShell das einfach: Die statische ToDateTime-Methode des Systems.Management.Die ManagementDateTimeConverter. NET-Klasse konvertiert die CIM-Datetime-Zeichenfolge in ein DateTime-Objekt, das wir in PowerShell einfacher verwenden können. Abbildung 1 zeigt ein Beispiel.,

Abbildung 1 – Konvertieren der letzten Bootzeit des Computers in eine DateTime

In Abbildung 1 enthält die Variable $DateTime das Datum und die Uhrzeit, zu der der aktuelle Computer zuletzt gestartet wurde. Um die Ausgabe der Betriebszeit (anstelle des Datums und der Uhrzeit des letzten Starts) zu erhalten, können wir sie von der aktuellen Uhrzeit (Get-Date) subtrahieren, was zu einem TimeSpan-Objekt führt, das die Differenz enthält. Abbildung 2 zeigt ein Beispiel dafür.,

Abbildung 2 – Konvertieren der letzten Startzeit des Computers in eine lesbare Betriebszeit

Der erste Befehl in Abbildung 2 erstellt ein TimeSpan-Objekt, das die Differenz zwischen dem aktuellen Datum und der letzten Startzeit enthält (das $DateTime-Objekt, das wir in Abbildung 1 erstellt haben). Der zweite Befehl gibt das TimeSpan-Objekt aus, und der letzte Befehl verwendet den Operator-f, um die TimeSpan als lesbare formatierte Zeichenfolge auszugeben, die angibt, dass der aktuelle Computer 4 Tage, 19 Stunden, 56 Minuten und 44 Sekunden lang aktiv war.,

Abrufen der letzten Startzeit von einem Remotecomputer

Die Beispiele in den Abbildungen 1 und 2 zielen auf den lokalen Computer ab. Wie können wir auf einen Remote-Computer zielen? Glücklicherweise können wir mit WMI Informationen über einen Remotecomputer mithilfe des Parameters-ComputerName abrufen. Mit WMI können wir auch alternative Anmeldeinformationen für einen Remotecomputer in einem PSCredential-Objekt angeben. Abbildung 3 zeigt ein Beispiel für die letzte Startzeit für einen Computer mit dem Namen server1.,

Abbildung 3 – Abrufen der letzten Startzeit von einem Remotecomputer

Der erste Befehl in Abbildung 3 ruft ein PSCredential-Objekt in die Variable $cred ab, und der zweite Befehl ruft die CIM-Datetime-Zeichenfolge ab, die die letzte Startzeit für den Computerserver1 enthält (beachten Sie die Parameter-ComputerName und-Credential). Der dritte Befehl konvertiert die letzte Startzeit in ein DateTime-Objekt, und der letzte Befehl gibt die letzte Startzeit für den Computer aus.

Alles zusammensetzen-die Get-Uptime.,ps1 Script

Die in den Abbildungen 1 und 2 gezeigten Beispiele zeigen, wie die letzte Startzeit des Computers abgerufen und als leicht lesbare Zeichenfolge angezeigt wird, und Abbildung 3 zeigt, wie die letzte Startzeit eines Remotecomputers abgerufen wird. Natürlich müssen wir uns nicht an alle Nuancen erinnern, wenn wir die Logik in ein benutzerfreundliches Skript kapseln. Das Skript Get-Uptime. ps1 erledigt die ganze harte Arbeit für uns. Die Syntax des Skripts lautet wie folgt:

Der Parameter-ComputerName ist optional und benennt die Computer, für die Sie die Betriebszeitinformationen abrufen möchten., Dieser Parameter unterstützt mehrere Objekte, Pipeline-Eingaben und Objekte mit einer ComputerName-Eigenschaft. Der Parametername-ComputerName ist optional. Wenn Sie diesen Parameter weglassen, werden standardmäßig Betriebszeitinformationen für den aktuellen Computer ausgegeben.

Der Parameter-Credential liefert alternative Anmeldeinformationen, wenn Sie einen oder mehrere Remotecomputer abfragen möchten und Ihr aktuell angemeldetes Konto keinen Zugriff hat. Das Abfragen der Betriebszeit erfordert keine Administratorrechte auf dem lokalen Computer, ist jedoch für Remotecomputer erforderlich.,

Das Skript gibt Objekte mit drei Eigenschaften aus: ComputerName (der Name des Computers), LastBootTime (eine Datumszeit, die die letzte Startzeit des Computers enthält) und Uptime (eine einfach zu lesende Betriebszeitzeichenfolge).

Verfügbarkeit für mehrere Computer abrufen

Abbildung 4 veranschaulicht die Verfügbarkeit für drei Remotecomputer auf zwei verschiedene Arten.,

Abbildung 4 – Abrufen der Betriebszeit für drei Remotecomputer auf zwei verschiedene Arten

Der erste Befehl in Abbildung 4 gibt die drei Computer als Parameter für das Skript Get-Uptime an, und der zweite Befehl gibt die drei Computer als Pipeline-Eingabe an. Beachten Sie, dass beide Befehle eine identische Ausgabe erzeugen (außer dass die Uptime-Zeichenfolgen in der Ausgabe des zweiten Befehls etwas später sind).

Da das Skript Pipeline-Eingaben unterstützt, können Sie sogar die Ausgabe des Cmdlets Get-ADComputer verwenden, um über die Betriebszeit aller Computer in einer OU zu berichten., Betrachten Sie beispielsweise den folgenden Befehl:

(Ich habe den Befehl auf mehrere Zeilen aufgeteilt, um das Lesen zu erleichtern.) Dieser Befehl ruft die Namen aller Computer in der Server-OU ab, wählt nur die Namenseigenschaft jedes Computers aus (Select-Object-ExpandProperty), sortiert die Liste der Computernamen und erhält schließlich die Betriebszeit von jedem Computer.

Computer-Uptime Leicht Gemacht

Computer-uptime ist eine wichtige Metrik. In PowerShell gibt es verschiedene Möglichkeiten, die Verfügbarkeit zu erhöhen, jedoch keine einfache. Get-Uptime.,ps1 Script füllt diese Lücke und macht es einfach, Computer-Uptime zu bekommen, egal ob Sie die aktuelle Computer-Uptime oder Uptime für Remote-Computer erhalten möchten.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.