# ============================================
# Administracja systemem Windows
# Automatyzacja i optymalizacja w PowerShell
# ============================================
# Ścieżki
$sciezkaZrodlowa = "D:\DANE_FIRMY"
$sciezkaArchiwum = "D:\ARCHIWUM"
$plikRaportu = "D:\raport.txt"
# Data graniczna (30 dni)
$dataGraniczna = (Get-Date).AddDays(-30)
# Pobranie wszystkich plików tylko raz
$pliki = Get-ChildItem -Path $sciezkaZrodlowa -File -Recurse
# ============================================
# 1. Analiza plików
# ============================================
$liczbaPlikow = $pliki.Count
$rozmiarBajty = ($pliki | Measure-Object -Property Length -Sum).Sum
$rozmiarMB = [math]::Round($rozmiarBajty / 1MB, 2)
Write-Host "=================================="
Write-Host "ANALIZA PLIKÓW"
Write-Host "Liczba plików: $liczbaPlikow"
Write-Host "Łączny rozmiar: $rozmiarMB MB"
Write-Host "=================================="
# ============================================
# 2. Archiwizacja plików
# - starsze niż 30 dni
# - większe niż 5 MB
# ============================================
$plikiDoArchiwizacji = $pliki | Where-Object {
$_.LastWriteTime -lt $dataGraniczna -and
$_.Length -gt 5MB
}
$liczbaArchiwum = 0
foreach ($plik in $plikiDoArchiwizacji) {
# Zachowanie struktury katalogów
$relatywnaSciezka = $plik.FullName.Substring($sciezkaZrodlowa.Length)
$cel = Join-Path $sciezkaArchiwum $relatywnaSciezka
# Tworzenie katalogu docelowego jeśli nie istnieje
$folderDocelowy = Split-Path $cel
if (!(Test-Path $folderDocelowy)) {
New-Item -Path $folderDocelowy -ItemType Directory -Force | Out-Null
}
# Kopiowanie pliku
Copy-Item -Path $plik.FullName -Destination $cel -Force
$liczbaArchiwum++
}
Write-Host "Pliki zarchiwizowane: $liczbaArchiwum"
# ============================================
# 3. Czyszczenie plików TMP
# ============================================
$plikiTMP = $pliki | Where-Object {
$_.Extension -eq ".tmp"
}
$liczbaTMP = $plikiTMP.Count
$plikiTMP | Remove-Item -Force
Write-Host "Usunięte pliki TMP: $liczbaTMP"
# ============================================
# 4. Tworzenie raportu
# ============================================
$raport = @"
====================================
RAPORT SYSTEMOWY
====================================
Data: $(Get-Date)
Liczba wszystkich plików: $liczbaPlikow
Łączny rozmiar danych: $rozmiarMB MB
Liczba zarchiwizowanych plików: $liczbaArchiwum
Liczba usuniętych plików TMP: $liczbaTMP
====================================
"@
$raport | Out-File -FilePath $plikRaportu -Encoding UTF8
Write-Host "Raport zapisano w: $plikRaportu"