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

[float] und [single]

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 

 

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
30.09.2016 06:01
User: Dieter 
Gutes Tutorial! Bei einfache und doppelte Anführungszeichen hat sich noch ein Tippfehler eingeschlichen. Es muss heißen "es sei denn ...".
✍Bernhard
gepostet am 30.09.2016 06:01
natürlich, vielen Dank, habe ich ausgebessert

Beitrag erstellt von Bernhard

✍anonym
06.09.2016 08:49
User: Peter 
Gute Seite. Verständliche Beispiele. Danke!

✍anonym
08.08.2016 07:02
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
✍Bernhard
gepostet am 08.08.2016 07:02
danke, habe ich ausgebessert

Beitrag erstellt von Bernhard

✍anonym
10.06.2016 09:39
User: joern 
Die Erklärung auf deiner Seite ist sehr gut zu verstehen. 
Danke!
Gruß aus Hamburg