====== Übung: Powershell-Anwenderwissen ====== ==== Teil 1 ==== Erstelle ein Powershell-Skript, welches - zuerst den Computernamen, den Namen des aktuellen Benutzers und dessen Anmeldedomäne ausgibt. - Anschließend sollen alle lokalen Benutzer und alle lokalen Gruppen zur Übersicht ausgegeben werden. - 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. * Gehe von der Situation aus, dass ein Kollege dir bereits unfertige Skript-Teile dafür zur Verfügung stellt oder dass du solche aus dem Internet zusammenkopiert hast. * Das fertige Skript soll zusätzlich folgende Eigenschaften erfüllen: * Zu Beginn soll auswählbar sein, ob man Dateien sichern oder prüfen möchte. * Wenn ein Dateisystemobjekt zur Überwachung angegeben wurde, das nicht existiert oder kein Verzeichnis ist, dann soll das Skript abgebrochen werden. * Füge die unten bereitgestellten Code-Abschnitte zu einem funktionierenden Skript zusammen und nimm wo notwendig Anpassungen und Ergänzungen vor. * Teste dein Skript anschließend, indem du Dateien anlegst und anschließend auch veränderst. __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." } })