Geek School schreibt Ihr erstes vollständiges PowerShell-Skript
Vor einigen Wochen zeigte Ihnen The Geek, wie Sie die Eingabeaufforderung verwenden können, um zu ermitteln, wann der Computer zuletzt gestartet wurde. In dieser letzten Installation von Geek School for PowerShell schreiben wir einen wiederverwendbaren PowerShell-Befehl, um dasselbe zu tun.
Lesen Sie unbedingt die vorherigen Artikel der Serie:
- Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
- Verwenden von Cmdlets in PowerShell
- Informationen zum Verwenden von Objekten in PowerShell
- Lernen Sie das Formatieren, Filtern und Vergleichen in PowerShell
- Informationen zum Verwenden von Remoting in PowerShell
- Verwenden von PowerShell zum Abrufen von Computerinformationen
- Arbeiten mit Sammlungen in PowerShell
- Informationen zum Verwenden von Jobs in PowerShell
- Erfahren Sie, wie Sie PowerShell erweitern
- Lernen von PowerShell-Variablen, Eingabe und Ausgabe
Schreiben Sie Ihr erstes Skript
Als erstes müssen wir einen Weg finden, auf die Informationen zuzugreifen, nach denen wir suchen. Da wir uns mit Verwaltungsinformationen beschäftigen, müssen wir uns wahrscheinlich mit WMI beschäftigen. WMI verfügt über eine Klasse mit dem Namen Win32_OperatingSystem, mit der Sie ausführliche Informationen zu Ihrem Betriebssystem einschließlich des letzten Starts anzeigen können.
Nun, da wir wissen, wo wir die gesuchten Informationen finden können, öffnen Sie die ISE und geben Sie Folgendes ein.
Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |
Select-Object -Property CSName, LastBootUpTime
Hinweis: Ich musste meinen Code in zwei Zeilen aufteilen, damit er in den Screenshot passt, aber ich kann ihn gerne in einer einzigen Zeile eingeben. Wenn Sie sich für eine Aufteilung in zwei Zeilen entscheiden, stellen Sie sicher, dass das Pipe-Zeichen das letzte Zeichen in Zeile 1 ist.
Klicken Sie nun auf die grüne Schaltfläche "Run Script" oder drücken Sie die Taste F5 auf Ihrer Tastatur, um den Code zu testen.
WMI-Zeiten können etwas kryptisch sein. Damit meinen wir, wenn Sie sich die LastBootUpTime-Eigenschaft ansehen, die 2013-03-19 um 18:26:21 lautet. Aber aus irgendeinem Grund haben sich die WMI-Jungs entschieden, das alles in einer einzigen Zeichenfolge zu verketten. Glücklicherweise müssen wir uns nicht um das manuelle Parsen der Zeichenfolge kümmern, da es eine einfachere Möglichkeit gibt, wenn auch fortgeschrittener. Sie müssen den Select-Object-Teil des Codes so ändern, dass er wie folgt aussieht:
Select-Object -Property CSName, @ n = "Last booted";
e = [Management.ManagementDateTimeConverter] :: ToDateTime ($ _. LastBootUpTime)
Wir erstellen hier eine benutzerdefinierte Eigenschaft mit dem Namen "Last Booted" und legen fest, dass deren Wert das Ergebnis des Aufrufs der statischen Methode ToDateTime für die LastBootUpTime-Eigenschaft des aktuellen Pipelineobjekts sein muss. Ihr Code sollte jetzt so aussehen.
Wenn Sie den Code jetzt ausführen, erhalten Sie eine deutlich lesbarere Startzeit.
Nun, da wir mit der grundlegenden Funktionalität unseres Skripts zufrieden sind, müssen wir es speichern. Zur Vereinfachung speichern wir es wie folgt:
C: \ Get-LastBootTime.ps1
Wechseln Sie nun zur unteren Hälfte der ISE und führen Sie Folgendes aus:
C: \ Get-LastBootTime.ps1
Großartig! Unser Skript funktioniert wie erwartet, jedoch gibt es immer noch ein Problem mit unserem Skript. Wir haben den Namen des Computers hart codiert, für den wir die letzte Startzeit erhalten möchten. Anstatt Werte fest zu codieren, sollten wir stattdessen einen Parameter angeben, damit derjenige, der das Skript verwendet, den Computer auswählen kann, auf dem er das Skript ausführt. Um dies zu tun, gehen Sie zum Anfang Ihres Skripts und führen Sie die folgenden Schritte aus.
param (
[Zeichenfolge] $ Computername
)
Ersetzen Sie dann den festcodierten localhost-Wert durch die Variable $ ComputerName. Ihr Skript sollte jetzt so aussehen:
Speichern Sie Ihr Skript, gehen Sie zurück zur unteren Hälfte der ISE und rufen Sie die Hilfe für Ihr Skript auf.
Hilfe C: \ Get-LastBootTime.ps1
Toll, also können wir jetzt den Namen des Computers angeben, an dem wir den letzten Startzeitpunkt für die Verwendung unseres neuen Parameters ComputerName erhalten möchten. Leider sind immer noch ein paar Dinge falsch. Erstens ist der Parameter ComputerName optional und zweitens ist dies das hässlichste Hilfsmittel, das ich je gesehen habe. Lassen Sie uns diese Probleme schnell beheben. Um den ComputerName-Parameter obligatorisch zu machen, ändern Sie den Inhalt des param-Blocks in Folgendes.
[Parameter (obligatorisch = $ true)] [Zeichenfolge] $ Computername
Um eine bessere Hilfedatei zu erstellen, verwenden Sie am häufigsten die kommentarbasierte Hilfe. Das heißt, wir fügen einfach einen extra langen Kommentar zum Anfang des Out-Skripts hinzu.
<#
.ZUSAMMENFASSUNG
Zeigt an, wann der PC zuletzt gestartet wurde.
.BESCHREIBUNG
Dies ist eine WMI-Wrapper-Funktion, um den Zeitpunkt zu ermitteln, zu dem Ihr PC zuletzt gestartet wurde.
.PARAMETER Computername
Der Name des Computers, auf dem Sie den Befehl ausführen möchten.
.BEISPIEL
Get-LastBootTime -ComputerName localhost
.VERKNÜPFUNG
www.howtogeek.com
#>
Sobald dies erledigt ist, sollten Sie mit einem Skript enden, das so aussieht.
Lassen Sie uns jetzt unsere neue Hilfedatei durchgehen.
Ahhh, sieht toll aus! Jetzt, da unser Skript abgeschlossen ist, müssen wir noch eines tun: testen. Dazu verlasse ich die ISE und gehe zurück in die PowerShell-Konsole, damit wir sicherstellen können, dass keine Anomalien auftreten.
Wenn Sie mit einem einfachen Liner beginnen und einfach weiter darauf aufbauen, wie in diesem Handbuch beschrieben, werden Sie in kürzester Zeit den Dreh raus haben. Das ist alles für diese Zeit, Leute, wir sehen uns in der nächsten Installation von Geek School.