15Sep

Geek School: Schreiben Sie Ihr erstes Full PowerShell Skript

Vor ein paar Wochen hat The Geek Ihnen gezeigt, wie Sie mit der Eingabeaufforderung herausfinden können, wann Ihr Computer zuletzt gestartet wurde. In dieser letzten Installation von Geek School for PowerShell werden wir einen wiederverwendbaren PowerShell-Befehl schreiben, um dasselbe zu tun.

Lesen Sie sich die vorherigen Artikel in der Serie durch:

  • Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
  • Lernen mit Cmdlets in PowerShell
  • Lernen mit Objekten in PowerShell
  • Lernen mit Formatierung, Filtern und Vergleichen in PowerShell
  • Lernen mit Remoting inPowerShell
  • Verwenden von PowerShell zum Abrufen von Computerinformationen
  • Arbeiten mit Collections in PowerShell
  • Lernen von Jobs in PowerShell
  • Lernen zum Erweitern von PowerShell
  • Lernen von PowerShell-Variablen, Eingabe und Ausgabe

Das erste Skript

Das erste, was wir tun müssen, isteinen Weg finden, um auf die gesuchten Informationen zuzugreifen. Da wir uns mit Managementinformationen beschäftigen, müssen wir wahrscheinlich einen Blick auf die Verwendung von WMI werfen, die in der Tat eine Klasse namens Win32_OperatingSystem hat, mit der Sie ausführliche Informationen über Ihr Betriebssystem anzeigen können, einschließlich des letzten Starts.

Nun, da wir wissen, wo wir die gesuchten Informationen finden können, öffnen Sie die ISE und geben Sie Folgendes ein.

Get-WmiObject -Klasse Win32_OperatingSystem -ComputerName localhost |

Select-Object -Property CSName, LastBootUpTime

Hinweis: Ich musste meinen Code über zwei Zeilen teilen, so dass sie alle in den Screenshot passen, aber Sie können ihn auch in einer einzigen Zeile eingeben. Wenn Sie wählen, es über zwei Zeilen zu teilen, stellen Sie bitte sicher, dass das Pipe-Zeichen das letzte Zeichen in Zeile 1 ist.

Klicken Sie nun auf den grünen "Run Script" -Button oder drücken Sie die F5-Taste auf Ihrer Tastatur, um den Code zu testen.

WMI-Zeiten können ein wenig kryptisch sein. Damit meinen wir, wenn man sich die LastBootUpTime-Eigenschaft anschaut, sagt es 2013-03-19 um 18:26:21, aber aus irgendeinem Grund haben die WMI-Leute beschlossen, all das zu einer einzigen Kette zu verketten. Glücklicherweise müssen wir uns keine Gedanken darüber machen, wie man die Zeichenkette manuell parst, da es einen einfacheren Weg gibt, wenn auch fortgeschrittener. Sie müssen den Select-Object-Teil des Codes so ändern, dass er so aussieht:

Select-Object -Property CSName, @{ n = "Zuletzt gestartet";

e ={ [Management. ManagementDateTimeConverter]: : ToDateTime( $ _. LastBootUpTime)}}

Hier erstellen wir eine benutzerdefinierte Eigenschaft namens "Last Booted" und geben an, dass ihr Wert das Ergebnis des Aufrufs von ToDateTime static sein mussMethode für die LastBootUpTime-Eigenschaft des aktuellen Pipeline-Objekts. Ihr Code sollte jetzt so aussehen.

Die Ausführung des Codes führt zu einer deutlich lesbareren Zeit beim letzten Booten.

Jetzt, da wir mit der grundlegenden Funktionalität unseres Skripts zufrieden sind, müssen wir es speichern. Der Einfachheit halber speichern wir es wie folgt:

C: \ Get-LastBootTime.ps1

Wechseln Sie nun in die untere 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 festgeschrieben, für den wir die letzte Boot-Zeit bekommen wollen. Anstatt Werte hart zu codieren, sollten wir lieber einen Parameter angeben, so dass derjenige, der das Skript verwendet, wählen kann, gegen welchen Computer das Skript ausgeführt wird. Um dies zu tun, gehen Sie an den Anfang Ihres Skripts und gehen Sie folgendermaßen vor.

param(
[Zeichenfolge] $ ComputerName
)

Ersetzen Sie dann den fest codierten Wert für localhost durch die Variable $ ComputerName. Ihr Skript sollte nun wie folgt aussehen:

Speichern Sie Ihr Skript, gehen Sie dann zurück in die untere Hälfte der ISE und sehen Sie sich die Hilfe für Ihr Skript an.

Hilfe C: \ Get-LastBootTime.ps1

Super, jetzt können wir den Namen des Computers angeben, der die letzte Boot-Zeit für die Verwendung unseres neuen ComputerName-Parameters erhalten soll. Leider sind da noch ein paar Dinge falsch. Erstens ist der ComputerName-Parameter optional und zweitens ist das das hässlichste, was ich je gesehen habe, also lassen Sie uns diese Probleme schnell beheben.Ändern Sie den Inhalt des Parameterblocks in den folgenden, um den ComputerName-Parameter obligatorisch zu machen.

[Parameter( Mandatory = $ true)] [Zeichenfolge] $ ComputerName

Um eine bessere Hilfedatei zu erstellen, verwenden Sie am häufigsten kommentarbasierte Hilfe. Das bedeutet, dass wir dem Skript oben einen extra langen Kommentar hinzufügen.

& lt; #
. SYNOPSIS
Zeigt an, wann der PC zuletzt gestartet wurde.
. DESCRIPTION
Dies ist eine WMI-Wrapper-Funktion, um die Zeit zu ermitteln, zu der Ihr PC zuletzt gestartet wurde.
. PARAMETER ComputerName
Der Name des Computers, für den der Befehl ausgeführt werden soll.
. EXAMPLE
Get-LastBootTime -Computername localhost
. LINK
www.howtogeek.com
# & gt;

Sobald alles erledigt ist, sollten Sie ein Skript erhalten, das so aussieht.

Lasst uns jetzt unsere neue Hilfedatei anschauen.

Ahhh, sieht gut aus! Jetzt, da unser Skript vollständig ist, haben wir noch eine letzte Aufgabe: Testen. Dafür werde ich die ISE verlassen und mich wieder in die PowerShell-Konsole begeben, damit wir sicherstellen können, dass es keine Anomalien gibt.

Wenn Sie mit einem einfachen Liner beginnen und einfach weiterbauen, wie wir es in diesem Handbuch getan haben, werden Sie in kürzester Zeit den Dreh raus bekommen. Das ist alles für diese Zeit Leute, wir sehen uns in der nächsten Installation von Geek School.