PowerShell: kataloogi ruumikasutuse aruande skript

From ICO wiki
Jump to navigationJump to search
<#
 
.SYNOPSIS
 Koostab faililaiendite põhjal aruande ruumi kasutusest kataloogis.
 
.DESCRIPTION
  See skript käib ette antud kataloogi läbi ja koostab faililaiendite põhjal 
  aruande, kus on näidatud, kui palju on iga faililaiendiga faile ja kui palju
  moodustavad need failid kataloogi kogumahust.
  
  Tulemuseks annab skript nimekirja, kus igal objektil on järgnevad väärtused:
    Extension  - Faili laiend
    SizeTotal  - Selle laiendi poolt kasutatud ruum (baitides)
    SizeUsage  - Selle laiendi poolt protsentuaalselt kasutatud ruum
    SizeAvg    - Keskmine faili suurus (antud laiendiga)
    CountTotal - Selle failaiendiga failide arv
  
  NB! Mahukamate kataloogide puhul võib aruande koostamine natuke aega võtta.
 
.Example
  C:\PS>.\filetype_overview.ps1 "C:\Users\" | Sort-Object CountTotal -desc | Format-Table
  
  Loendab tulemused failide arvu järgi ja kuvab need tabeli kujul. Aruanne tehakse kataloogi "C:\Users\" põhjal.
  
.Example
  C:\PS>.\filetype_overview.ps1 "C:\Users\" | Sort-Object SizeTotal -desc | Select-Object -First 1
  
  Leiab kõige rohkem ruumi võtvama faililaiendi "C:\Users\" kataloogis.

.NOTES
  Autor: Taavi Sannik A21
  Versioon: 0.9
  Viimati muudetud: 23.05.2012
 
.LINK
  http://www.itcollege.ee

#>

param([string]$path = ".")

$total_size = 0
$results = @{}

# Kogume andmed käies kataloogi läbi
Get-ChildItem -Path $path -Recurse | ForEach {
    $ext = $_.Extension
    
    if (!$_.Length) {
        return
    }
    
    # Kontrollime kas kirje selle laiendi kohta on olemas
    if (!$results.ContainsKey($ext)) {
        # Kui ei ole, siis lisame
        $ext_oview = New-Object psobject -Property @{Extension = $ext; 
                                                     SizeTotal = $_.Length; 
                                                     CountTotal = 1; 
                                                     SizeUsage = .0;
                                                     SizeAvg = 0;}
        $results.Set_Item($ext, $ext_oview)
    } else {
        # Muudame olemasolevat
        $ext_oview = $results.Get_Item($ext)
        $ext_oview.SizeTotal += $_.Length
        $ext_oview.CountTotal += 1
    }
    
    # Loeme kokku kogumahu
    $total_size += $_.Length
}

$results.Values | ForEach {
    # Arvutame keskmised ja protsentuaalse kasutuse
    $_.SizeAvg   = [System.Math]::Round($_.SizeTotal / $_.CountTotal, 0)
    $_.SizeUsage = [System.Math]::Round(($_.SizeTotal / $total_size) * 100, 2)
}

# Tagastame tulemused
return $results.Values