336 lines
15 KiB
PowerShell
336 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
|
|
|
|
# Rozpoczęcie iterowania po dysku w poszukiwaniu wszystkich plików i folderów
|
|
Get-ChildItem -LiteralPath $Litera_Dysku -Recurse -Force | ForEach-Object {
|
|
# 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)
|
|
}
|
|
}
|
|
}
|
|
$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
|
|
|
|
$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)" |