PowerShell/RozmiarBloku/RozamiarBloku.ps1

343 lines
15 KiB
PowerShell

# Analizator Dysku
#
param (
[ValidatePattern("^[a-zA-Z]:\\$")]
[Parameter(Mandatory=$true, HelpMessage="Podaj literę dysku, np.: D:\")]
[string]$Litera_Dysku
)
if (-not(Test-Path $Litera_Dysku)) {
Write-Error "Dysk $Litera_Dysku nie istnieje"
}
$startdate = Get-Date
# Aktualny rozmiar bloku
$Block_Size = Get-CimInstance -ClassName Win32_Volume -Filter "DriveType = 3" | Where-Object name -eq $($Litera_Dysku) | Select-Object BlockSize -ExpandProperty BlockSize
[int64]$Licznik_Folderow = 0
[int64]$Licznik_Plikow = 0
[int64]$Wielkosc_Plikow_suma = 0
[int64]$wielkosc_Plikow_suma_KB = 0
[int64]$wielkosc_Plikow_suma_MB = 0
[int64]$wielkosc_Plikow_suma_GB = 0
$Wielkosc_Bloku = [System.Collections.Generic.List[pscustomobject]]::new()
$Wielkosc_Bloku_lista = [pscustomobject]@{
"0,5 KB" = 0
"1 KB" = 0
"2 KB" = 0
"4 KB" = 0
"8 KB" = 0
"16 KB" = 0
"32 KB" = 0
"64 KB" = 0
"128 KB" = 0
"256 KB" = 0
"512 KB" = 0
"1024 KB" = 0
"2048 KB" = 0
"4096 KB" = 0
"8192 KB" = 0
"16384 KB" = 0
"32768 KB" = 0
"65536 KB" = 0
"131072 KB" = 0
"262144 KB" = 0
"524288 KB" = 0
"1048576 KB" = 0
"1 GB+" = 0
}
$Wielkosc_Bloku.Add($Wielkosc_Bloku_lista)
$Rozszerzenia = [System.Collections.Generic.List[pscustomobject]]::new()
$rozszerzenia_lista = [PSCustomObject]@{
Rozszerzenie = ""
Ilosc = 0
}
$Rozszerzenia.Add($rozszerzenia_lista)
$glebokosc_start = $true
$progres = 0
# Rozpoczęcie iterowania po dysku w poszukiwaniu wszystkich plików i folderów
Get-ChildItem -LiteralPath $Litera_Dysku -Recurse -Force | ForEach-Object {
$progres++
if (($progres % 50000) -eq 0) {
Write-host "Przeprocesowano $progres obiektów"
}
# Jeżeli znaleziono folder
if ($_.PSIsContainer -eq $true) {
# Zwiększenie licznika folderów
$Licznik_Folderow++
# Zdefiniowanie głębokości
if ($glebokosc_start -eq $true) {
$Glebokosc_folderow = (($_.FullName.Split("\").count) -1)
$glebokosc_start = $false
} else {
# Przypisanie nowej większej głębokości
if ($Glebokosc_folderow -lt (($_.FullName.Split("\").count) -1)) {
$Glebokosc_folderow = (($_.FullName.Split("\").count) -1)
}
}
# Jeżeli nie jest to folder
} else {
# Zwiększenie licznika plików
$Licznik_Plikow++
# Zsumowanie rozmiarów plików (2 miejsca po przecinku)
[int64]$Wielkosc_Plikow_suma = [Math]::Round(($Wielkosc_Plikow_suma + [int64]$_.Length), 2)
[int64]$wielkosc_Plikow_suma_KB = [Math]::Round(($Wielkosc_Plikow_suma / 1KB), 2)
[int64]$wielkosc_Plikow_suma_MB = [Math]::Round(($wielkosc_Plikow_suma / 1MB), 2)
[int64]$wielkosc_Plikow_suma_GB = [Math]::Round(($wielkosc_Plikow_suma / 1GB), 2)
# Przypisanie pliku do grupy na podstawie rozmiaru bloku
$length = $_.Length
switch ($length) {
{ ($length -le 512) }
{
$Wielkosc_Bloku[0]."0,5 KB" = $Wielkosc_Bloku[0]."0,5 KB" + 1
}
{ ($length -gt 512) -and ($length -le 1024) }
{
$Wielkosc_Bloku[0]."1 KB" = $Wielkosc_Bloku[0]."1 KB" + 1
}
{ ($length -gt 1024) -and ($length -le 2048) }
{
$Wielkosc_Bloku[0]."2 KB" = $Wielkosc_Bloku[0]."2 KB" + 1
}
{ ($length -gt 2048) -and ($length -le 4096) }
{
$Wielkosc_Bloku[0]."4 KB" = $Wielkosc_Bloku[0]."4 KB" + 1
}
{ ($length -gt 4096) -and ($length -le 8192) }
{
$Wielkosc_Bloku[0]."8 KB" = $Wielkosc_Bloku[0]."8 KB" + 1
}
{ ($length -gt 8192) -and ($length -le 16384) }
{
$Wielkosc_Bloku[0]."16 KB" = $Wielkosc_Bloku[0]."16 KB" + 1
}
{ ($length -gt 16384) -and ($length -le 32768) }
{
$Wielkosc_Bloku[0]."32 KB" = $Wielkosc_Bloku[0]."32 KB" + 1
}
{ ($length -gt 32768) -and ($length -le 63488) }
{
$Wielkosc_Bloku[0]."64 KB" = $Wielkosc_Bloku[0]."64 KB" + 1
}
{ ($length -gt 63488) -and ($length -le 131072) }
{
$Wielkosc_Bloku[0]."128 KB" = $Wielkosc_Bloku[0]."128 KB" + 1
}
{ ($length -gt 131072) -and ($length -le 262144) }
{
$Wielkosc_Bloku[0]."256 KB" = $Wielkosc_Bloku[0]."256 KB" + 1
}
{ ($length -gt 262144) -and ($length -le 524288) }
{
$Wielkosc_Bloku[0]."512 KB" = $Wielkosc_Bloku[0]."512 KB" + 1
}
{ ($length -gt 524288) -and ($length -le 1048576) }
{
$Wielkosc_Bloku[0]."1024 KB" = $Wielkosc_Bloku[0]."1024 KB" + 1
}
{ ($length -gt 1048576) -and ($length -le 2097152) }
{
$Wielkosc_Bloku[0]."2048 KB" = $Wielkosc_Bloku[0]."2048 KB" + 1
}
{ ($length -gt 2097152) -and ($length -le 4194304) }
{
$Wielkosc_Bloku[0]."4096 KB" = $Wielkosc_Bloku[0]."4096 KB" + 1
}
{ ($length -gt 4194304) -and ($length -le 8388608) }
{
$Wielkosc_Bloku[0]."8192 KB" = $Wielkosc_Bloku[0]."8192 KB" + 1
}
{ ($length -gt 8388608) -and ($length -le 16777216) }
{
$Wielkosc_Bloku[0]."16384 KB" = $Wielkosc_Bloku[0]."16384 KB" + 1
}
{ ($length -gt 16777216) -and ($length -le 33554432) }
{
$Wielkosc_Bloku[0]."32768 KB" = $Wielkosc_Bloku[0]."32768 KB" + 1
}
{ ($length -gt 33554432) -and ($length -le 67108864) }
{
$Wielkosc_Bloku[0]."65536 KB" = $Wielkosc_Bloku[0]."65536 KB" + 1
}
{ ($length -gt 67108864) -and ($length -le 134217728) }
{
$Wielkosc_Bloku[0]."131072 KB" = $Wielkosc_Bloku[0]."131072 KB" + 1
}
{ ($length -gt 134217728) -and ($length -le 268435456) }
{
$Wielkosc_Bloku[0]."262144 KB" = $Wielkosc_Bloku[0]."262144 KB" + 1
}
{ ($length -gt 268435456) -and ($length -le 536870912) }
{
$Wielkosc_Bloku[0]."524288 KB" = $Wielkosc_Bloku[0]."524288 KB" + 1
}
{ ($length -gt 536870912) -and ($length -le 1073741824) }
{
$Wielkosc_Bloku[0]."1048576 KB" = $Wielkosc_Bloku[0]."1048576 KB" + 1
}
default {
$Wielkosc_Bloku[0]."1 GB+" = $Wielkosc_Bloku[0]."1 GB+" + 1
}
}
if ($Rozszerzenia.Rozszerzenie -contains $_.Extension) {
$ext = $_.Extension
$extension = $Rozszerzenia | Where-Object { $_.Rozszerzenie -eq $ext }
if ($extension) {
$index = $Rozszerzenia.IndexOf($extension)
$Rozszerzenia[$index].Ilosc = $Rozszerzenia[$index].Ilosc + 1
}
} else {
$rozszerzenia_lista = [PSCustomObject]@{
Rozszerzenie = $_.Extension
Ilosc = 1
}
$Rozszerzenia.Add($rozszerzenia_lista)
}
}
}
Write-host "Przeprocesowano $progres obiektów"
$enddate = Get-Date
Clear-Host
""
Start-Sleep 1
Write-Host "Skrypt wystartował o: " -NoNewline
Write-Host "$startdate" -ForegroundColor Green
Write-Host "Skrypt zatrzymał się o: " -NoNewline
Write-Host "$enddate" -ForegroundColor Green
Write-Host "Skrypt trwał: " -NoNewline
Write-Host "$($enddate - $startdate)" -ForegroundColor Green
""
Start-Sleep 1
Write-Host "Przeskanowano " -NoNewline
Write-Host "$Licznik_Plikow" -NoNewline -ForegroundColor Green
Write-Host " plików i " -NoNewline
Write-Host "$Licznik_Folderow" -NoNewline -ForegroundColor Green
Write-Host " folderów gdzie najgłębsze zagnieżdżenie wynosi " -NoNewline
Write-Host "$Glebokosc_folderow" -ForegroundColor Green -NoNewline
Write-host "."
Start-Sleep 1
Write-Host "Znaleziono " -NoNewline
Write-host "$($Rozszerzenia.Count)" -ForegroundColor Green -NoNewline
Write-Host " unikalnych rodzajów plików które dzielą się następująco:"
$Rozszerzenia = $rozszerzenia | Sort-Object Ilosc
for ($i = 0; $i -lt $Rozszerzenia.Count; $i++) {
Write-Host "Znaleziono " -NoNewline
Write-Host "$($Rozszerzenia[$i].Ilosc)" -ForegroundColor Green -NoNewline
Write-Host " plików o rozszerzeniu " -NoNewline
Write-Host "$($Rozszerzenia[$i].Rozszerzenie)" -ForegroundColor Green
}
""
Start-Sleep 1
Write-Host "Aktualny rozmiar bloku to: " -NoNewline
Write-Host $Block_Size -ForegroundColor Green
Write-Host "Gdzie suma rozmiarów plików w B to: " -NoNewline
Write-host "$($Wielkosc_Plikow_suma)" -ForegroundColor Green
Write-Host "Gdzie średni rozmiar pliku w B to: " -NoNewline
Write-host "$($Wielkosc_Plikow_suma / $Licznik_Plikow)" -ForegroundColor Green
Write-Host "Gdzie suma rozmiarów plików w KB to: " -NoNewline
Write-host "$($Wielkosc_Plikow_suma_KB)" -ForegroundColor Green
Write-Host "Gdzie średni rozmiar pliku w KB to: " -NoNewline
Write-host "$($wielkosc_Plikow_suma_KB / $Licznik_Plikow)" -ForegroundColor Green
Write-Host "Gdzie suma rozmiarów plików w MB to: " -NoNewline
Write-host "$($Wielkosc_Plikow_suma_MB)" -ForegroundColor Green
Write-Host "Gdzie średni rozmiar pliku w MB to: " -NoNewline
Write-host "$($wielkosc_Plikow_suma_MB / $Licznik_Plikow)" -ForegroundColor Green
Write-Host "Gdzie suma rozmiarów plików w GB to: " -NoNewline
Write-host "$($Wielkosc_Plikow_suma_GB)" -ForegroundColor Green
Write-Host "Gdzie średni rozmiar pliku w GB to: " -NoNewline
Write-host "$($wielkosc_Plikow_suma_GB / $Licznik_Plikow)" -ForegroundColor Green
Write-Host "Znalezione pliki można przypisać do następujących bloków: "
$wielkosc_bloku
Start-Sleep 1
$allValues = $wielkosc_bloku | ForEach-Object { $_.PSObject.Properties.Value }
$sortedValues = $allValues | Sort-Object
if ($sortedValues.Count % 2 -eq 0) {
$middle = $sortedValues.Count / 2
$median = ($sortedValues[$middle - 1] + $sortedValues[$middle]) / 2
} else {
$middle = [math]::Floor($sortedValues.Count / 2)
$median = [Math]::Round($sortedValues[$middle], 2)
}
Write-host "Mediana z tych wartości to: " -NoNewline
write-host "$median" -ForegroundColor green -NoNewline
Write-Host " plików."
$minValue = [Math]::Round(($wielkosc_bloku | ForEach-Object { $_.PSObject.Properties.Value | Measure-Object -Minimum | Select-Object -ExpandProperty Minimum }), 2)
$maxValue = [Math]::Round(($wielkosc_bloku | ForEach-Object { $_.PSObject.Properties.Value | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }), 2)
$avgValue = [Math]::Round(($wielkosc_bloku | ForEach-Object { $_.PSObject.Properties.Value | Measure-Object -Average | Select-Object -ExpandProperty Average }), 2)
Write-host "Średnia z tych wartości to: " -NoNewline
Write-host "$avgValue" -ForegroundColor Green -NoNewline
Write-Host " plików."
Write-host "Największa wartość to: " -NoNewline
Write-host "$maxValue" -ForegroundColor Green -NoNewline
Write-Host " plików."
Write-host "Najmniejsza wartość to: " -NoNewline
Write-host "$minValue" -ForegroundColor Green -NoNewline
Write-Host " plików."
$wielkosc_bloku | Export-Csv -Path "$($env:userprofile)\wielkosc_bloku.csv" -NoTypeInformation -Force
Write-Host "Plik wielkosc_bloku.csv zapisano w w lokalizacji $($env:userprofile)"
Start-Sleep 1
$wielkosc_bloku_new = ($wielkosc_bloku.psobject.Properties.value[4].psobject.Members.Where({$_.membertype -eq "noteproperty"}) | select name,value)
[array]$tmp = @()
for ($i = 0; $i -lt $wielkosc_bloku_new.Count; $i++) {
if ($wielkosc_bloku_new[$i].name -eq "0,5 KB") {
[array]$tmp += [PSCustomObject]@{
"Rozmiar bloku" = $wielkosc_bloku_new[$i].name
"Ilosc plikow" = $wielkosc_bloku_new[$i].value
"Suma KB" = [float]($wielkosc_bloku_new[$i].value) / 2
}
} elseif ($wielkosc_bloku_new[$i].name -eq "1 GB+") {
[array]$tmp += [PSCustomObject]@{
"Rozmiar bloku" = $wielkosc_bloku_new[$i].name
"Ilosc plikow" = $wielkosc_bloku_new[$i].value
"Suma KB" = "n/d"
}
} else {
[array]$tmp += [PSCustomObject]@{
"Rozmiar bloku" = $wielkosc_bloku_new[$i].name
"Ilosc plikow" = $wielkosc_bloku_new[$i].value
"Suma KB" = [Int64]($wielkosc_bloku_new[$i].value) * [Int64]($wielkosc_bloku_new[$i].name.Split(" ")[0])
}
}
}
[array]$tmp | Sort-Object "Suma KB" -Descending | Format-Table
$allValues = $tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | ForEach-Object { [Int64]$_."Suma KB" }
$sortedValues = $allValues | Sort-Object
if ($sortedValues.Count % 2 -eq 0) {
$middle = $sortedValues.Count / 2
$median = ($sortedValues[$middle - 1] + $sortedValues[$middle]) / 2
} else {
$middle = [math]::Floor($sortedValues.Count / 2)
$median = [Math]::Round($sortedValues[$middle], 2)
}
Write-host "Mediana z tych wartości to: " -NoNewline
write-host "$median" -ForegroundColor green -NoNewline
Write-Host " KB."
[Int64]$minValue = ($tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | Measure-Object "Suma KB" -Minimum | Select-Object -ExpandProperty Minimum)
[Int64]$maxValue = ($tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | Measure-Object "Suma KB" -Maximum | Select-Object -ExpandProperty Maximum)
[float]$avgValue = ($tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | Measure-Object "Suma KB" -Average | Select-Object -ExpandProperty Average)
Write-host "Średnia z tych wartości to: " -NoNewline
Write-host "$avgValue" -ForegroundColor Green -NoNewline
Write-Host " KB."
Write-host "Największa wartość to: " -NoNewline
Write-host "$maxValue" -ForegroundColor Green -NoNewline
Write-Host " KB."
Write-host "Najmniejsza wartość to: " -NoNewline
Write-host "$minValue" -ForegroundColor Green -NoNewline
Write-Host " KB."
""
Write-Host "Wartości najbliższe dla mediany to: "
$tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | Where-Object {[float]$_."Suma KB" -le $median} | Sort-Object "Suma KB" -Descending | Select-Object -First 1
$tmp | Where-Object "Rozmiar bloku" -ne "1 GB+" | Where-Object {[float]$_."Suma KB" -ge $median} | Sort-Object "Suma KB" | Select-Object -First 1
""
Start-Sleep 1
$tmp | Export-Csv -Path "$($env:userprofile)\wielkosc_bloku_sumaKB.csv" -NoTypeInformation -Force
Write-Host "Plik wielkosc_bloku_sumaKB.csv zapisano w w lokalizacji $($env:userprofile)"