====== Ü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."
}
})