Erstelle ein Powershell-Skript, welches
(siehe dazu auch Umgebungsvariablen ($env:
) und Select
)
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." } })