de-DE/tutorials/Invoke-PSBasicsTutorial.ps1

# Ein interaktives Tutorial zu PowerShell-Grundlagen

Param(
    [switch]$Full,
    [switch]$Menu
)

if ($isWindows) {
    $root = "\"
}
else {
    $root = "/"
}

$title = "$($titleStyle)Wesentliche PowerShell-Grundlagen$($reset)"

#region Übersetzte Texte (de-DE)
$intro = @"
 
Um mit PowerShell zu beginnen, sollten Sie einige grundlegende Konzepte und Begriffe kennen. Sie müssen
PowerShell nicht vollständig beherrschen, bevor Sie beginnen, aber Sie sollten ein Grundverständnis
dafür haben, wie es funktioniert, damit Sie wissen, was Sie erwarten können.
 
"@


$P1 = @"
{0}Was ist PowerShell?{1}
 
PowerShell besteht aus zwei Hauptkomponenten: der {2}Shell{1} und der {2}Skriptsprache{1}. Die Shell
ist die interaktive Befehlszeilenschnittstelle, in der Sie Befehle und Skripte ausführen können. Die Skriptsprache
ist die Sprache, mit der Sie Skripte schreiben und Aufgaben automatisieren. Dieselben Befehle
und die gleiche Sprache werden in beiden verwendet. Mit anderen Worten: Wenn Sie einen Befehl in der Shell
ausführen können, können Sie ihn auch in einem Skript verwenden.
 
PowerShell basiert auf dem .NET-Framework und verwendet einen {3}objektorientierten{1} Ansatz. Alles, womit Sie in PowerShell arbeiten,
sind Objekte, nicht Text. Sie {4}müssen{1} jedoch kein .NET-Entwickler sein, um PowerShell zu verwenden.
 
"@
 -f $highLight3,$reset,$highLight,$highLight2,$PSStyle.Underline

$P2 = @"
PowerShell-Befehle werden {3}Cmdlets{1} genannt. Ein Cmdlet ist ein leichter Befehl, der verwendet wird, um
eine bestimmte Aufgabe auszuführen. PowerShell-Befehle folgen einer Verb-Substantiv-Benennungskonvention, die
es einfach macht, sie zu finden und zu verwenden. Es sollte klar sein, was der Befehl {0}Get-Process{1} macht.
 
$prompt {0}Get-Process{1} {2}pwsh{1}
"@
 -f $cmdStyle, $reset,$defaultTokenStyle,$highLight

$P3 = @"
Die Ausgabe eines PowerShell-Befehls ist technisch gesehen ein Objekt, wird jedoch so formatiert, dass sie
leichter lesbar ist.
 
"@


$P4 = @"
 
{0}Aliases{1}
 
PowerShell hat das Konzept von Aliasen. Ein Alias ist ein kurzer Name für ein Cmdlet. Sie sollen
Ihnen beim Tippen Zeit sparen oder den Umstieg für Benutzer anderer Shells erleichtern.
 
$prompt {2}dir{1} {3}$root{1}
 
"@
 -f $highLight3, $reset,$cmdStyle,$defaultTokenStyle

$P5 = @"
 
Sie führen jedoch nicht den nativen {3}dir{1}-Befehl aus. Sie verwenden einen Alias für den
nativen PowerShell-Befehl {0}Get-ChildItem.{1} Die Ausführung dieses Befehls ist gleichwertig mit der Verwendung des Alias.
 
$prompt {0}Get-ChildItem{1} {2}$root{1}
 
"@
 -f $cmdStyle,$reset,$defaultTokenStyle,$highLight

$P6 = @"
 
Das bedeutet, dass Sie beim Alias die Parameter des PowerShell-Befehls verwenden müssen.
 
$prompt {0}dir{1} {2}`$home{1} {3}-Directory -Hidden{1}
"@
 -f $cmdStyle,$reset,$defaultTokenStyle,$paramStyle

$P7 = @"
Sie können das Cmdlet {0}Get-Alias{1} verwenden, um in PowerShell definierte Aliase zu entdecken.
 
"@
 -f $cmdStyle,$reset,$highLight

$P8 = @"
{0}Die Pipeline{1}
 
Das PowerShell-Paradigma basiert auf dem Konzept von Objekten, die durch eine {6}Pipeline{1} geleitet werden. Die
Pipeline wird durch das |-Symbol angezeigt.
 
Stellen Sie sich die Pipeline wie ein Förderband vor, auf dem Objekte von einem Befehl zum nächsten weitergegeben werden. Jeder
Befehl in der Pipeline führt eine bestimmte Aufgabe an dem Objekt aus und gibt es dann an den folgenden
Befehl weiter. Auf diese Weise können Sie aus einfachen Befehlen komplexe Befehle und Skripte bauen.
 
$prompt {2}Get-Process{1} | {2}Sort-Object{1} {3}WorkingSet{1} {4}-Descending{1} | {2}Select-Object{1} {4}-first {5}5{1}
 
"@
 -f $highLight3, $reset,$cmdStyle,$defaultTokenStyle,$paramStyle,$numberStyle,$highlight

$P9 =@"
Der erste Befehl holt alle Prozesse auf dem lokalen Computer. Die Ausgabe dieses Befehls
ist eine Sammlung von Prozessobjekten. Der zweite Befehl sortiert die Sammlung von Prozess-
objekten nach der Eigenschaft WorkingSet in absteigender Reihenfolge.
 
Sie werden lernen, wie Sie Objekt-Eigenschaften mit {0}Get-Member{1} entdecken.
 
Die sortierten Prozessobjekte werden dann an den dritten Befehl, {0}Select-Object{1}, übergeben, der
die ersten fünf Objekte auswählt. PowerShell zeigt die Ausgabe des letzten Befehls in der Pipeline an.
 
Wenn Sie diese Aufgabe häufig ausführen möchten, können Sie die Befehle in eine Skriptdatei legen. Die
Ausgabe ist dieselbe, als hätten Sie die Befehle interaktiv in der Shell ausgeführt, ohne sie erneut eingeben zu müssen.
 
"@
 -f $cmdStyle,$reset

$P10 = @"
{0}Variablen{1}
 
Wie viele Skript- und Shellsprachen kennt PowerShell Variablen. Eine Variable hält
einen Wert, wie zum Beispiel einen Textstring oder eine Zahl. Verwenden Sie das {2}`${1}-Zeichen, um eine Variable zu definieren.
 
$prompt {3}`$i{1} = {4}123{1}
$prompt {3}`$n{1} = {5}"pw*"{1}
 
"@
 -f $highLight3, $reset,$highLight,$varStyle,$numberStyle,$stringStyle

$P11 = @"
Sie können auch die Ausgabe eines PowerShell-Befehls oder Ausdrucks in einer Variable speichern.
 
$prompt {3}`$files{1} {2}={1} {0}Get-ChildItem{1} {3}-Path{1} {4}`$HOME{1} {3}-file{1} | {0}Sort-Object{1} {3}-Property{1} {6}LastWriteTime{1} | {0}Select-Object{1} {3}-first{1} {5}5{1}
 
"@
 -f $cmdStyle,$reset,$operatorStyle,$paramStyle,$varStyle,$numberStyle,$defaultTokenStyle

$P12 = @"
Wenn Sie eine Variable verwenden möchten, referenzieren Sie sie mit dem `$-Zeichen vor dem Namen.
 
$prompt {0}`$i{2}*{1}2{2}
"@
 -f $varStyle,$numberStyle,$reset

$P13 = @"
$prompt {0}Get-Process{1} {2}`$n{1}
"@
 -f $cmdStyle,$reset,$varStyle

$P14 = @"
 
Sie können die Variable auch in einem pipelining Ausdruck verwenden.
 
$prompt {0}`$files{1} | {2}Group-Object{1} {3}-property{1} {4}Extension{1} | {2}Sort-Object{0} {4}Count{1} {3}-Descending{1}
"@
 -f $varStyle,$reset,$cmdStyle,$paramStyle,$defaultTokenStyle

$P15 = @"
Beachten Sie, dass sich Objekte in der Pipeline basierend auf dem auszuführenden Befehl ändern können. Die {2}`$files{1}-Variable enthält
Dateiobjekte. Der Befehl {0}Group-Object{1} erstellt einen neuen Objekttyp mit anderen Eigenschaften. Diese
Objekte werden dann an den Befehl {0}Sort-Object{1} weitergereicht.
 
Können Sie erraten, welchen Befehl Sie ausführen würden, um alle PowerShell-Variablen zu erhalten?
 
"@
 -f $cmdStyle,$reset,$highLight

$P16 = @"
$Prompt {0}Get-Variable{1}
"@
 -f $cmdStyle,$reset

$P17 = @"
PowerShell verfügt über viele eingebaute Variablen, die Sie verwenden können.
 
$prompt {0}`$PSEdition{1}
"@
 -f $varStyle,$reset

$P17a = @"
$prompt {0}`$PSVersionTable{1}
"@
 -f $varStyle,$reset

$P18 = @"
 
Sobald Sie die anderen Tutorials abgeschlossen haben, sollten Sie in der Lage sein, PowerShell-Befehle
über die Konsole auszuführen.
 
"@

#endregion

#region Run the tutorial
Clear-Host

$title
$Intro
pause
$P1
pause
$P2
Get-Process pwsh | Out-Host
pause
$P3
pause
Clear-Host
$P4
Pause
#I am fudging the display
"`e[2A"
(dir $root | Select-Object -first 10 ) && "...`n" | Out-Host
pause
Clear-Host
$P5
"`e[2A"
(Get-ChildItem $root | Select-Object -first 10 | Out-Host) && "`e[1A...`n" #| Out-Default
Pause
Clear-Host
$P6
dir $home -Directory -Hidden | Select-Object -first 5  && "...`n"  | Out-Host
pause
$P7
pause
Clear-Host
$P8
pause
"`e[2A"
Get-Process| Sort-Object WorkingSet -Descending | Select-Object -first 5 | Out-Host
Pause
$P9
pause
Clear-Host
$P10
pause
$i = 123
$n = "pw*"
$P11
pause
$files =  Get-ChildItem -Path $HOME -file | Sort-Object -Property LastWriteTime | Select-Object -first 5
$P12
$i*2 | Out-Host
$P13
Get-Process $n | Out-Host
Pause
Clear-Host
$P14
$files | Group-Object -property Extension | Sort-Object Count -Descending | Out-Host
Pause
$P15
pause
$P16
(Get-Variable | Select-Object -first 10 | Out-Host) && "`e[1A...`n"
Pause
Clear-Host
$P17
$PSEdition | Out-Host
$P17a
$PSVersionTable | Out-Host
$P18
pause

#endregion

if ($full) {
    &$tutorials['Get-Command'] -Full
}
elseif ($Menu) {
    Start-PSTutorial
}