PowerShell Variablen, Datentypen und Objekte
Grundlagen zu PowerShell Variablen und deren Datentypen.
Variablen und Datentypen
Variablen können unterschiedlichste Inhalte haben, z.B. einen Text, eine Zahl, ein Datum oder ein Objekt. Um die Art der Inhalte festzulegen, werden Datentypen verwendet, hier ist ein kleiner Auszug aus bekannten Powershell-Datentypen:
Typ |
Beschreibung |
---|---|
[datetime] |
Datum und Zeit |
[string] |
String (Text) Zeichenkette beliebiger Länge |
[regex] |
Regulärer Ausdruck |
[xml] |
XML-Dokument |
[int] |
Ganzzahl mit 32Bit Länge, negative und positive Werte |
|
Zahl mit Nachkommastellen (Länge 32bit) |
[char] |
einzelnes Zeichen |
[double] |
Zahl mit Nachkommastellen (Länge 64bit) |
[single] |
Single-precision floating number |
[byte] |
Ganzzahl mit 8Bit Länge: nur negativ (0 - 255) |
[long] |
Ganzzahl negativ und positiv (64bit Länge) |
[dezimal] |
Zahl mit Nachkommastellen, 86Bit Länge |
[bool] |
Ja-Nein-Werte |
[wmi] |
Windows Management Instrumentation (WMI-Objekt) |
[wmiclass] |
WMI-Klasse |
[adsi] |
Active Directory Services object |
[wmiclass] |
WMI-Klasse |
[wmisearcher] |
WMI-Suchabfrage |
[adsi] |
Verzeichnisdienstobjekt |
[adsisearcher] |
LDAP-Suchanfrage in einem Verzeichnisdienst |
[scriptblock] |
Powershell Skriptblock |
[hashtable] |
Hash-Tabelle: Name-Wert von beliebigen Objekten |
[psobject] |
PowerShell-Objekt |
[type] |
Metadaten zu einer Klasse |
... | ... |
Variablen ohne Typ (untypisiert)
Es ist nicht zwingend notwendig einen Datentyp anzugeben, eine Variable kann auch ohne Datentyp gespeichert werden.
$x="1"
Beim Aufruf von $x gibt Powershell 1 zurück.
Wird die Variable $x mit einem Datentyp aufgerufen, konvertiert Powershell die Variable in den jeweiligen Datentyp:
In der Ausgabe macht es keinen Unterschied, ob 1 als Zahl oder als Text ausgeben wird ...
Typ zu einem Wert
Eine Variable kann mit dem Inhalt des Datentyps Zahl definiert werden. $x = [int]"1"
$x wurde hier mit einer Zahl "1" abgespeichert. In diesem Fall kann die Zahl mit einem Text (String) überschrieben werden:
$x="stringtext" würde funktionieren, da die Variable $x für unterschiedliche Datentypen verwendet werden kann:
Im Gegensatz zu folgendem Beispiel:
Typ zu einer Variable
Wird die Variable auf einen bestimmten Datentyp festgelegt, kann diese nicht mit einem anderen Typ überschrieben werden:
[int]$x = "1"
In diesem Fall wird die Variable zum Typ "int" gemacht. Die Variable kann dadirch nur mehr für Zahlen (int) verwendet werden:
Der Wert "stringtext" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."
Nur bestimmte Werte:validateset
Mit Validateset können nur bestimmte Werte erlaubt werden:
[validateset("1","2","3")][int]$x = "1"
... funktioniert
[validateset("1","2","3")][int]$x = "4"
... ist nicht zulässig
Die Variable kann nicht überprüft werden, da der Wert 4 kein gültiger Wert für die x-Variable ist.
Datum
Werden Variablen mit dem Typ datetime verwendet, schlägt PowerShell ISE (siehe: wie erstelle ich ein PowerShell Skript ) bereits vor was mit dieser Variable möglich ist (Eigenschaften und Funktionen):
mit .AddDays
können beispielsweise einfach eine bestimmte Anzahl an Tagen zur Variable hinzugefügt oder abgezogen werden.
Löschen von Variablen
Die Variable kann mit dem Befehl Remove-Variable
wieder gelöscht werden:
Der Alias für Remove-Variable
ist rv
; Alias, siehe: Funktion und Begriffe
einfache und doppelte Anführungszeichen
Variablen innerhalb doppelter Anführungszeichen (") werden interpretiert, es sei denn sie werden mit ` auskommentiert. Variablen innerhalb einfacher Anführungszeichen (') werden nicht interpretiert.
Eingabe von Variablen durch den Benutzer
[int]$x=read-host -prompt "bitte eine Zahl eingeben"
Objekte-Members (GM)
In einer Variable können auch Objekte gespeichert werden. Zum Beispiel kann mit get-service
ein bestimmter Dienst in einer Variable gespeichert werden:
$x=get-service -name wuauserv
Der Dienst, in unserem Beispiel wuauserv, ist ein Objekt mit bestimmten Eigenschaften und Methoden. Eine Eigenschaft könnte der Status des Dienstes sein: gestartet oder gestoppt, eine Methode den Dienst zu starten oder zu stoppen.
mittels Get-Member oder GM können dann alle Methoden und Eigenschaften des Objektes ausgegeben werden:
Die Variable wird mittels Pipe | an das Cmdlet Get-Member übergeben. (Details zu Pipes werden später in diesem Artikel genauer erklärt: PowerShell Syntax: vergleichen und verschachteln)
Die angezeigten Member können dann mit der Variable verwendet werden, z.B. "Status"
$x.status
mittels $x.start()
oder $x.stop()
kann der Dienst gestartet oder gestoppt werden:
Eigenschaften und Methoden einer Variable in einer Variable
Damit eine Eigenschaft einer Variable innerhalb eines Strings angewandt wird, muss diese als Variable interpretiert werden und innerhalb von $(....)
stehen.
Klingt kompliziert, eventuell macht es das folgende Beispiel klarer:
ohne $(..)
wird $x.day
so interpretiert:
$x
ohne Eigenschaft und .day
als Text:
Variable mit mehreren Objekten
Wird ein Cmdlet in einer Variable gespeichert, welches mehrere Objekte beinhaltet, wird die Variable zu einem Array:
$x
ruft alle Dienste auf, gleichbedeutende mit der Eingabe von get-service
$x[0]
ruft das erste Objekt des Arrays auf
$x[1]
das zweite Objekt
$x[-1]
das letzte Objekt
$x[0..3]
ruft die Objekte 1 bis 4 auf
$x.count
zählt alle Objekte
$x[$x.count..0]
ruft zum Beispiel alle Objekte in umgekehrter Reihenfolge auf:
Arrays werden auch in folgendem Artikel beschrieben: Powershell Loops und Array
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Dieter Gutes Tutorial! Bei einfache und doppelte Anführungszeichen hat sich noch ein Tippfehler eingeschlichen. Es muss heißen "es sei denn ...".
natürlich, vielen Dank, habe ich ausgebessert
Beitrag erstellt von Bernhard
User: Stiebl Soweit ichs jetzt gesehen habe echt gutes und sehr einfach gehaltenes Tutorial. Kleiner Tippfehler am Schluss bei $x[$x.cont..0] in der Beschreibung :D
danke, habe ich ausgebessert
Beitrag erstellt von Bernhard
User: joern Die Erklärung auf deiner Seite ist sehr gut zu verstehen. Danke! Gruß aus Hamburg