Inhaltsverzeichnis

Übung: Powershell-Anwenderwissen

Teil 1

Erstelle ein Powershell-Skript, welches

  1. zuerst den Computernamen, den Namen des aktuellen Benutzers und dessen Anmeldedomäne ausgibt.
  2. Anschließend sollen alle lokalen Benutzer und alle lokalen Gruppen zur Übersicht ausgegeben werden.
  3. Als letztes soll das Skript ermitteln, ob der aktuelle Benutzer Mitglied der Administratorengruppe ist und das Ergebnis ausgeben.

(siehe dazu auch Umgebungsvariablen ($env:) und Select)

Teil 2

Erstelle ein Powershell-Skript, welches in der Lage ist Veränderungen an Dateien in einem Verzeichnis anhand derer Hash-Werte zu erkennen.

Code-Abschnitt zur Überprüfung ob ein Ordner existiert

$path = Read-Host -Prompt "Pfad angeben"
if (-Not (Test-Path -Path $path))
{
    echo "$($path) existiert nicht. Abbruch.)"
    throw 'FileDoesNotExistError'
}
 
if (-Not ($(Get-Item -Path $path) -is [System.IO.DirectoryInfo]))
{
    echo "$(path) ist kein Verzeichnis. Abbruch"
    throw 'ISNoDirectoryError'
}
echo "OK"

Code-Abschnitt mit einer Funktion, welche überprüft, ob der Hashwert einer anzugebenen Datei in einer Liste (Ausgabe von Get-FileHash) mit Datei-Hash-Werten enthalten ist

function Check-Hash ($FilePath, $HashList)
{
    $matched = $false
    $HashList.ForEach({
        if ($FilePath -eq $_.Path)
        {
            $hash = Get-FileHash -Path $FilePath -Algorithm $_.Algorithm
            if ($hash.Hash -eq $_.Hash)
            {
                $matched = $true
            }
        }
    })
 
    return $matched
}

Code-Abschnitt mit dem Grundgerüst für das Skript

$action = Read-Host -Prompt "Möchten Sie sichern oder prüfen? (s/p)"
if ($action -eq "s")
{
    # Hash-Werte berechnen und sichern
}
elseif ($action -eq "p")
{
    # Hash-Werte laden und prüfen
}
else
{
    echo "Keine Auswahl getroffen. Abbruch."
}

Code-Abschnitt für das Sichern der Hash-Werte

$path = Read-Host "Welches Verzeichnis soll überwacht werden?"
 
$hashfile = Read-Host -Prompt "In welche Datei sollen die Hash-Werte geschrieben werden?"
 
$hashes = Get-ChildItem -Path $path | Get-FileHash -Algorithm SHA1
 
$hashes | Export-Csv -Path $hashfile

Code-Abschnitt für das Prüfen der Hash-Werte

$path = Read-Host -Prompt "Welches Verzeichnis soll geprüft werden?"
 
$hashfile = Read-Host -Prompt "Aus welcher Datei sollen die Hash-Werte gelesen werden?"
 
$hashlist = Import-Csv -Path $hashfile
 
$(Get-ChildItem -Path $path).ForEach({
    $unchanged = Check-Hash -FilePath $_.FullName -HashList $hashlist
    if (-Not $unchanged)
    {
        Write-Host "$($_.FullName) wurde verändert."
    }
})