Загрузка данных


# ============================================
# 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"