| | 0

PowerShell: Die Shell – Part 12

3.11 Die Shell

Wie ist die Shell sonst so?

Die optische Ähnlichkeit mit der CMD Shell ist wohl eine der wenigen Gemeinsamkeiten. Die PowerShell kennt das sogenannte Tab-Completition (Vervollständigung) nicht nur auf dem Drive Filesystem und nicht nur in Bezug auf die unmittelbaren Inhalte der aktuellen Location, sondern auch in Bezug auf alle Cmd-lets und alle PSDrives simultan. Drücken der Taste TAB nach der Eingabe des ersten Buchstabens eines existierenden Objekts oder Cmdlets verändert die Eingabezeile ab der ersten Cursorposition in das zuerst gefundene Element einer Trefferliste, welche mit dem eingegebenen Buchstaben (oder Buchstabenfolge) beginnt. Hoffentlich kann das anhand des folgenden Beispiels besser nachvollzogen werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.  Get-Location
Path
----
X:\
10. g
G:                      # gefunden in Function:
gal                         # gefunden in Alias:
gatherNetworkInfo.vbs               # gefunden im FileSystem
gbp                         # gefunden in Alias:
gc                      #...
gci
Get-Acl                         # ein Cmdlet
…                           #...
Get-Childitem                   # ein Cmdlet

Festhalten der SHIFT Taste, während die TAB Taste gedrückt wird, wandert die Liste in umgekehrten Reihenfolge ab.

Die Befehle in der Shell müssen nicht unbedingt in einer Zeile eingegeben werden. Erkennt die PowerShell beim Drücken der Taste Enter einen unvollständigen Befehl, springt die Eingabe in die nächste Zeile und deutet die Fortsetzung des Befehls mit den Zeichen „>>“ an. Analog kann die Eingabe auf weitere Zeilen verteilt werden. Soll die Eingabe beendet werden, reicht das zweimalige Drücken der Enter Taste:

1
2
3
4
1.  1-
2.  >> 2
3.  >>
-1

Hier ist etwas Vorsicht geboten, wenn ein Ausdruck eingegeben wird, hinter dem optionale Elemente vorkommen können. Unter Umständen erkennt die PowerShell einen vollständigen Befehl, obwohl die Absicht bestand, die optionalen Elemente ebenfalls zu benutzen (siehe auch Kapitel 4.4.1).

Eine weitere Besonderheit betrifft die Strings. Strings werden grundsätzlich in Anführungszeichen eingegeben. Die Anführungszeichen werden auch dann verwendet, wenn zu übergebende Argumente Leerzeichen enthalten. Es können sowohl die doppelten, wie auch die einfachen Anführungszeichen sein. Der Unterschied zwischen den beiden Arten besteht darin, dass Variablen in doppelten Anführungszeichen ersetzt werden und in den einfachen nicht:

1
2
3
4
5
1.  $x=5
2.  "x=$x"
x=5
3.  'x=$x'
x=$x

Bestimmte Zeichen haben in der Shell eine besondere Bedeutung. Dazu gehört z.B. „\“, Leerzeichen „/“, Anführungszeichen, etc. Um auch diese Zeichen innerhalb von Strings eingeben zu können, müssen sie maskiert werden. Dazu wird das sogenannte Escape-Zeichen in Form von einem umgekehrten einfachen Anführungszeichen verwendet:

1
2
3
4
5
6
7
8
1.  "Die Variable mit dem Namen `"`$a`" hat den Wert 5"
Die Variable mit dem Namen "$a" hat den Wert 5
11. Set-Location c:\Program` Files
12. Get-Location
Path
----
C:\program files

Die Eingabe von „ `“ und der Taste Enter an jeder beliebigen Stelle in der Shell erzwing die Fortsetzung in der nächsten Zeile. Auf diese Art und Weise können auch in Skripten Zeilenumbrüche „mitten im Befehl“ erzwungen werden.

Schließlich hat das Escape-Zeichen in Verbindung mit einigen Zeichen eine besondere Bedeutung innerhalb von Strings:

`0 Null
`a akustische Benachrichtigung (Beep)
`b Rückschritt (Backspace)
 `f Seitenvorschub (Form feed)
`n Zeilenwechsel (New line)
`r Wagenrücklauf (Carriage return)
 `t Horizontaler Tabstopp
`v Vertikaler Tabstopp
1
2
3
1.  “ErsteZeile`n`rZweiteZeile”
ErsteZeile
ZweiteZeile

Sowohl in der Shell, wie auch in Skripten, können mehrere Befehle hintereinander in einer Zeile eingegeben werden. Sie werden mit einem Semikolon voneinander getrennt. Dabei gibt es keinerlei logische Abhängigkeiten zwischen den einzelnen Befehlen, wie das in der CMD Shell der Fall wäre.

Zurück zu Part 11 – Laufwerke PSDrives

Weiter zu Part 13 – Die Preference und Error-Variable, Fehlerbehandlung

Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.