Verzeichnisanalyse
Zweck des Skripts
Das Skript dient zur automatisierten Analyse eines Verzeichnisses. Es zählt:
-
die Anzahl aller enthaltenen Ordner und Dateien (rekursiv),
-
die Anzahl leerer Ordner,
-
die Häufigkeit der verschiedenen Dateitypen anhand der Dateierweiterung,
-
die Gesamtgröße aller Dateien im Zielverzeichnis.
Die Ergebnisse werden als strukturierter Textbericht in einer Datei unter C:\Auswertung\AnalyseErgebnisse.txt gespeichert.
Einsatzszenario
Typischer Anwendungsfall ist die regelmäßige oder einmalige Analyse von zentralen Dateiablagen wie z. B. einem Intranet-Ordner, um Speicherverteilung, Ordnertiefe und Strukturierung besser bewerten zu können.
Voraussetzungen
-
PowerShell 5.1 oder höher
-
Schreibrechte auf dem Ausgabe-Pfad (
C:\Auswertung\) -
Leserechte auf dem analysierten Verzeichnis
param (
[string]$Path = "\\XXX.XXX.XXX.\ABC" # Standardpfad ist das aktuelle Verzeichnis
)
# Prüfen, ob der Pfad existiert
if (-Not (Test-Path -Path $Path)) {
Write-Host "Pfad existiert nicht: $Path"
exit
}
# Initialisierung von Zählern
$folderCount = 0
$fileCount = 0
$emptyFolderCount = 0
$fileTypeCounts = @{}
$totalSize = 0
# Rekursive Durchsuchung des Verzeichnisses
Get-ChildItem -Path $Path -Recurse | ForEach-Object {
if ($_.PsIsContainer) {
# Ordner
$folderCount++
if (-Not (Get-ChildItem -Path $_.FullName -Recurse | Where-Object { -Not $_.PsIsContainer })) {
# Leerer Ordner
$emptyFolderCount++
}
} else {
# Datei
$fileCount++
$fileExtension = $_.Extension.ToLower()
if (-Not $fileTypeCounts.ContainsKey($fileExtension)) {
$fileTypeCounts[$fileExtension] = 0
}
$fileTypeCounts[$fileExtension]++
$totalSize += $_.Length
}
}
# Ergebnisse zusammenstellen
$output = @()
$output += "Analyse von: $Path"
$output += "-------------------"
$output += "Gesamtanzahl Ordner: $folderCount"
$output += "Anzahl leerer Ordner: $emptyFolderCount"
$output += "Gesamtanzahl Dateien: $fileCount"
$output += "Größen pro Dateityp:"
foreach ($key in $fileTypeCounts.Keys) {
$output += " - $($key): $($fileTypeCounts[$key]) Dateien"
}
$output += "-------------------"
$output += "Gesamtgröße: $("{0:N2}" -f ($totalSize / 1MB)) MB"
# Ausgabe in Datei schreiben
$ausgabePfad = "C:\Auswertung\AnalyseErgebnisse.txt"
if (-Not (Test-Path -Path (Split-Path -Path $ausgabePfad -Parent))) {
New-Item -ItemType Directory -Path (Split-Path -Path $ausgabePfad -Parent) | Out-Null
}
$output | Set-Content -Path $ausgabePfad
Write-Host "Analyse abgeschlossen. Ergebnisse gespeichert in: $ausgabePfad"