Table of Contents

Woche 2 - Microsoft Windows Server Kurs

Tag 1: 17.02.2025 Montag

# gibt eine Liste der Funtionen, Aliases, Cmdlets etc.
Get-Command
# Funktion definieren
Function <FunctionName>
{
  <Anweisungsblock>
  
}
# Funktion aufrufen
<FunctionName> [-Parameter1 [Wert1]] [-ParameterN [WertN]] 
# 
Function Get-DiskDrive
{
  Get-PSDrive -PSProvider FileSystem
}
> MeineSkripte\MeineFunktionen.ps1
> # ab jetzt sind alle dort definierten Functions verfügbar
# Abfragen (auf der Konsole) ob eine Ausführung erlaubt ist:
Get-ExecutionPolicy
# Setzen:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
# Es gibt RemoteSigned / Unrestricted / AllSigned ...
. .\MeineFunktionen.ps1
# klassisch:
Function <Name>
{
  Param ($Parameter1[, $ParameterN])
  
  <Anweisungsblock>
}

# Neu (funktioniert nur bei Functions aber nicht bei Skriptenparametern):
Function <Name> [($Parameter1[, $ParameterN])] 
{
  
  <Anweisungsblock>
}
Function Get-LargeFiles ($Length)
{
  Get-ChildItem C:\Windows | Where-Object {$_.Length -ge $Length}  
}

# Mit Werten vorbelegen
Function Get-LargeFiles ($Location="C:\Windows", $Length=200)
{
  Get-ChildItem $Location | Where-Object {$_.Length -ge $Length}  
}
Function Get-MyProcess ($Length)
{
  Get-Process -Name s* | `
  Select -Property ID, ProcessName, CPU | `
  Sort -Property CPU -Descending
}
Function Test-Switch ([switch]$AnAus)
{
  if($AnAus) {
    # ...
  }
  else {
    # ...
  }
}
Function Get-LargeFiles ($groesse, [switch]$sortieren)
{
  $ausgabe = Get-ChildItem -Path C:\Windows -File | Where { $_.Length -ge $groesse}
  if($sortieren) {
    $ausgabe | Sort -Property Length
  }
  else {
    $ausgabe
  }
}
Function <Name> 
{
  Begin
  {
    # Anweisungsblock, der am Anfang ausgeführt wird
  }
  Process
  {
    # Anweisungsblock, der mit jedem Element ausgeführt wird
  }
  End
  {
    # Anweisungsblock, der am Ende ausgeführt wird
  }
}
Function Get_Pipe1
{
  Begin
  {
    # Anweisungsblock, der am Anfang ausgeführt wird
    Write-Host "Pipeline Funktion gestartet"
  }
  Process
  {
    # Anweisungsblock, der mit jedem Element ausgeführt wird
    Write-Host "Wert des aktuellen Objektes $_."
  }
  End
  {
    # Anweisungsblock, der am Ende ausgeführt wird
    Write-Host "Pipeline Funktion zu Ende ausgeführt"
  }
}
 
# Aufruf:
1,2,3 | Get_Pipe1
  Begin
  {
    # Anweisungsblock, der am Anfang ausgeführt wird
    Write-Host "Pipeline Funktion gestartet"
  }
  Process
  {
    # Anweisungsblock, der mit jedem Element ausgeführt wird
    Write-Host "Wert des aktuellen Objektes $_."
  }
  End
  {
    # Anweisungsblock, der am Ende ausgeführt wird
    Write-Host "Pipeline Funktion zu Ende ausgeführt"
  }
 
  # Aufruf (jede Datei/Directory in C:\Windows wird an das Skript myPipeScript.ps1 übergeben)
  Get-ChildItem C:\Windows | .\myPipeScript.ps1
<#
.SYNOPSIS
Kurzbeschreibung...  
 
.DESCRIPTION
Ausführliche Beschreibung...  
 
.PARAMETER
Beschreibung Parameter 1...  
 
.PARAMETER
Beschreibung Parameter 2...  
 
.EXAMPLE
Beispiel 1...  
 
.EXAMPLE
Beispiel 2...  
 
.NOTES
Notizen...  
 
.LINK
...  
 
#>

Übung 9.14 (Seite 133)

Function Get-MyMessage
{
  Write-Host "Hier sind meine Funktionen gespeichert."
}
 
# Fügen Sie Ihrem Skript eine neue Funktion Get-MyProcess hinzu, die Prozesse auf Ihrem lokalen Rechner unter folgenden Bedingungen anzeigt:
#  Die anzuzeigenden Prozesse beginnen mit dem Buchstaben s.
#  Die Spalten ID, ProcessName und CPU sollen angezeigt werden.
#  Die Anzeige soll absteigend nach der Eigenschaft CPU sortiert werden.
# Speichern Sie Ihr Skript, führen Sie es erneut aus und testen Sie die Funktion.
 
Function Get-MyProcess
{
  Get-Process -Name s* | Select-Object ID, ProcessName, CPU | Sort-Object CPU -Descending
}
 
# Kopieren Sie die Funktion Get-MyProcess und fügen Sie sie unter dem Namen Get-MyProcess2
# in Ihr Skript ein. Wandeln Sie die Funktion wie folgt ab:
#  Die Funktion soll einen Parameter $FilterName akzeptieren, der bestimmt, welche Prozesse angezeigt werden. 
# Standardwert: Es sollen Prozesse angezeigt werden, deren Name mit dem Buchstaben s
# beginnt.
#  Über einen Switch-Parameter $Liste soll gesteuert werden, die Ausgabe als Liste zu sehen
# (Format-List) und nicht als Tabelle.
# Speichern Sie Ihr Skript, führen Sie es erneut aus und testen Sie die neue Funktion
 
Function Get-MyProcess2 ($FilterName="s", [switch] $Liste)
{
  $ausgabe =  Get-Process -Name "$FilterName*" | Select-Object ID, ProcessName, CPU | Sort-Object CPU -Descending
  if($Liste) {
    $ausgabe = $ausgabe | Format-List  
  }
 
  $ausgabe
}

Tag 2: 18.02.2025 Dienstag

Und dann:

Tag 3: 19.02.2025 Mittwoch

Tag 4: 20.02.2025 Donnerstag

Tag 5: 21.02.2025 Freitag