z230
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# scan_cleanup_v1.0.ps1
|
||||
|
||||
**Verze:** 1.0 · **Datum:** 2026-06-15
|
||||
|
||||
## Účel
|
||||
READ-ONLY skener volného místa na disku pro účet **bez admin práv** (např. JNJ
|
||||
počítač). Skript **nic nemaže** — jen proskenuje typická user-space místa, kde
|
||||
lze uklízet bez administrátora, a vypíše přehled seřazený podle velikosti.
|
||||
|
||||
## Spuštění
|
||||
Na JNJ počítači v PowerShellu:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\scan_cleanup_v1.0.ps1
|
||||
```
|
||||
|
||||
Uložení reportu do souboru:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\scan_cleanup_v1.0.ps1 *> report.txt
|
||||
```
|
||||
|
||||
## Co skript dělá
|
||||
1. Vypíše volné/obsazené místo na systémovém disku.
|
||||
2. **Bezpečně smazatelné** — cache/temp (uživatelský TEMP, INetCache, WER,
|
||||
thumbnail cache, Chrome/Edge/Firefox cache, Teams, Office cache, pip/npm/
|
||||
NuGet/Playwright cache, Spotify storage, CrashDumps) s velikostí a počtem souborů.
|
||||
3. **K ruční kontrole** — Downloads, Plocha, Dokumenty, Koš (nemazat automaticky).
|
||||
4. **20 největších souborů v profilu** nad 100 MB.
|
||||
5. Vypíše hotové příkazy pro **ruční** smazání (kicker: aplikace musí být zavřené).
|
||||
|
||||
## Poznámky
|
||||
- Vše skenuje pouze v rámci uživatelského profilu → nepotřebuje admina.
|
||||
- Zamčené soubory (běžící prohlížeč apod.) se při pozdějším mazání přeskočí —
|
||||
před úklidem cache zavřít příslušnou aplikaci.
|
||||
- Reálné smazání si pouští uživatel ručně, nikdy ne skript sám.
|
||||
@@ -0,0 +1,164 @@
|
||||
# =============================================================================
|
||||
# scan_cleanup_v1.0.ps1
|
||||
# Verze: 1.0
|
||||
# Datum: 2026-06-15
|
||||
# Autor: Vladimír Buzalka (s asistencí Claude)
|
||||
# Popis: READ-ONLY skener volného místa na disku pro účet bez admin práv.
|
||||
# NIC NEMAŽE. Pouze proskenuje typická "user-space" místa, kde lze
|
||||
# uklízet bez administrátorských oprávnění, a vypíše přehled
|
||||
# seřazený podle velikosti + návrhy co smazat. Na konci ukáže
|
||||
# přesné příkazy pro skutečné smazání (musíš je spustit ručně).
|
||||
#
|
||||
# Spuštění (z PowerShellu, NEpotřebuje admina):
|
||||
# powershell -ExecutionPolicy Bypass -File .\scan_cleanup_v1.0.ps1
|
||||
# Volitelně uložení reportu do souboru:
|
||||
# powershell -ExecutionPolicy Bypass -File .\scan_cleanup_v1.0.ps1 *> report.txt
|
||||
# =============================================================================
|
||||
|
||||
$ErrorActionPreference = 'SilentlyContinue'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
function Format-Size {
|
||||
param([long]$Bytes)
|
||||
if ($Bytes -ge 1GB) { return ('{0:N2} GB' -f ($Bytes / 1GB)) }
|
||||
if ($Bytes -ge 1MB) { return ('{0:N1} MB' -f ($Bytes / 1MB)) }
|
||||
if ($Bytes -ge 1KB) { return ('{0:N0} KB' -f ($Bytes / 1KB)) }
|
||||
return "$Bytes B"
|
||||
}
|
||||
|
||||
function Get-FolderSize {
|
||||
param([string]$Path)
|
||||
if (-not (Test-Path -LiteralPath $Path)) { return $null }
|
||||
$files = Get-ChildItem -LiteralPath $Path -Recurse -Force -File -ErrorAction SilentlyContinue
|
||||
if (-not $files) { return [pscustomobject]@{ Bytes = 0; Count = 0 } }
|
||||
$sum = ($files | Measure-Object -Property Length -Sum)
|
||||
return [pscustomobject]@{
|
||||
Bytes = [long]($sum.Sum)
|
||||
Count = [int]$sum.Count
|
||||
}
|
||||
}
|
||||
|
||||
# --- Hlavička / info o disku -------------------------------------------------
|
||||
Write-Host ""
|
||||
Write-Host "===========================================================" -ForegroundColor Cyan
|
||||
Write-Host " SKEN MOZNOSTI UKLIDU DISKU (read-only, bez admina)" -ForegroundColor Cyan
|
||||
Write-Host " Pocitac: $env:COMPUTERNAME Uzivatel: $env:USERNAME" -ForegroundColor Cyan
|
||||
Write-Host " Cas: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Cyan
|
||||
Write-Host "===========================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Volné místo na systémovém disku
|
||||
$sysDrive = (Get-Item $env:SystemDrive)
|
||||
$drive = Get-PSDrive -Name $sysDrive.Name.TrimEnd(':') -ErrorAction SilentlyContinue
|
||||
if ($drive) {
|
||||
$free = $drive.Free
|
||||
$used = $drive.Used
|
||||
$total = $free + $used
|
||||
Write-Host ("Disk {0} celkem: {1} volne: {2} obsazeno: {3}" -f `
|
||||
$env:SystemDrive, (Format-Size $total), (Format-Size $free), (Format-Size $used)) -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# --- Kandidatske lokace (vse v ramci uzivatelskeho profilu = bez admina) -----
|
||||
# Bezpecne smazatelne (cache / temp / koš)
|
||||
$candidates = @(
|
||||
@{ Name = 'Uzivatelsky TEMP'; Path = $env:TEMP; Safe = $true }
|
||||
@{ Name = 'Windows Temp (user)'; Path = (Join-Path $env:LOCALAPPDATA 'Temp'); Safe = $true }
|
||||
@{ Name = 'INetCache (IE/Win)'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Windows\INetCache'); Safe = $true }
|
||||
@{ Name = 'WER - chybove reporty'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Windows\WER'); Safe = $true }
|
||||
@{ Name = 'Explorer thumbnail cache'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Windows\Explorer'); Safe = $true }
|
||||
@{ Name = 'Chrome - Cache'; Path = (Join-Path $env:LOCALAPPDATA 'Google\Chrome\User Data\Default\Cache'); Safe = $true }
|
||||
@{ Name = 'Chrome - Code Cache'; Path = (Join-Path $env:LOCALAPPDATA 'Google\Chrome\User Data\Default\Code Cache'); Safe = $true }
|
||||
@{ Name = 'Chrome - GPUCache'; Path = (Join-Path $env:LOCALAPPDATA 'Google\Chrome\User Data\Default\GPUCache'); Safe = $true }
|
||||
@{ Name = 'Edge - Cache'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Edge\User Data\Default\Cache'); Safe = $true }
|
||||
@{ Name = 'Edge - Code Cache'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Edge\User Data\Default\Code Cache'); Safe = $true }
|
||||
@{ Name = 'Firefox - cache2'; Path = (Join-Path $env:LOCALAPPDATA 'Mozilla\Firefox\Profiles'); Safe = $true }
|
||||
@{ Name = 'Teams - cache (classic)'; Path = (Join-Path $env:APPDATA 'Microsoft\Teams'); Safe = $true }
|
||||
@{ Name = 'Teams - cache (new)'; Path = (Join-Path $env:LOCALAPPDATA 'Packages\MSTeams_8wekyb3d8bbwe\LocalCache'); Safe = $true }
|
||||
@{ Name = 'Office - dokumentova cache'; Path = (Join-Path $env:LOCALAPPDATA 'Microsoft\Office\16.0\OfficeFileCache'); Safe = $true }
|
||||
@{ Name = 'pip cache (Python)'; Path = (Join-Path $env:LOCALAPPDATA 'pip\Cache'); Safe = $true }
|
||||
@{ Name = 'Playwright browsers cache'; Path = (Join-Path $env:LOCALAPPDATA 'ms-playwright'); Safe = $true }
|
||||
@{ Name = 'npm cache'; Path = (Join-Path $env:LOCALAPPDATA 'npm-cache'); Safe = $true }
|
||||
@{ Name = 'NuGet cache'; Path = (Join-Path $env:USERPROFILE '.nuget\packages'); Safe = $true }
|
||||
@{ Name = 'Spotify - Storage'; Path = (Join-Path $env:LOCALAPPDATA 'Spotify\Storage'); Safe = $true }
|
||||
@{ Name = 'CrashDumps'; Path = (Join-Path $env:LOCALAPPDATA 'CrashDumps'); Safe = $true }
|
||||
)
|
||||
|
||||
# Zkontrolovat ale NEMAZAT automaticky (uzivatel musi posoudit obsah)
|
||||
$review = @(
|
||||
@{ Name = 'Slozka Downloads (stahovani)'; Path = (Join-Path $env:USERPROFILE 'Downloads') }
|
||||
@{ Name = 'Plocha (Desktop)'; Path = (Join-Path $env:USERPROFILE 'Desktop') }
|
||||
@{ Name = 'Dokumenty'; Path = (Join-Path $env:USERPROFILE 'Documents') }
|
||||
@{ Name = 'Kos (Recycle Bin)'; Path = (Join-Path $env:SystemDrive '\$Recycle.Bin') }
|
||||
)
|
||||
|
||||
Write-Host "--- BEZPECNE SMAZATELNE (cache / temp) --------------------" -ForegroundColor Green
|
||||
$results = @()
|
||||
foreach ($c in $candidates) {
|
||||
$info = Get-FolderSize -Path $c.Path
|
||||
if ($info -and $info.Bytes -gt 0) {
|
||||
$results += [pscustomobject]@{
|
||||
Name = $c.Name
|
||||
Path = $c.Path
|
||||
Bytes = $info.Bytes
|
||||
Count = $info.Count
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$totalSafe = 0
|
||||
foreach ($r in ($results | Sort-Object Bytes -Descending)) {
|
||||
$totalSafe += $r.Bytes
|
||||
Write-Host (" {0,10} {1,7} souboru {2}" -f (Format-Size $r.Bytes), $r.Count, $r.Name)
|
||||
Write-Host (" -> {0}" -f $r.Path) -ForegroundColor DarkGray
|
||||
}
|
||||
if ($results.Count -eq 0) { Write-Host " (nic vyznamneho nenalezeno)" -ForegroundColor DarkGray }
|
||||
|
||||
Write-Host ""
|
||||
Write-Host (" >>> POTENCIAL CACHE/TEMP CELKEM: {0}" -f (Format-Size $totalSafe)) -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "--- K RUCNI KONTROLE (NEMAZAT automaticky) ----------------" -ForegroundColor Yellow
|
||||
foreach ($c in ($review)) {
|
||||
$info = Get-FolderSize -Path $c.Path
|
||||
if ($info) {
|
||||
Write-Host (" {0,10} {1,7} souboru {2}" -f (Format-Size $info.Bytes), $info.Count, $c.Name)
|
||||
Write-Host (" -> {0}" -f $c.Path) -ForegroundColor DarkGray
|
||||
}
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# --- TOP velke soubory v profilu (>100 MB) -----------------------------------
|
||||
Write-Host "--- 20 NEJVETSICH SOUBORU V PROFILU (>100 MB) -------------" -ForegroundColor Magenta
|
||||
$big = Get-ChildItem -LiteralPath $env:USERPROFILE -Recurse -Force -File -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.Length -gt 100MB } |
|
||||
Sort-Object Length -Descending |
|
||||
Select-Object -First 20
|
||||
if ($big) {
|
||||
foreach ($f in $big) {
|
||||
Write-Host (" {0,10} {1}" -f (Format-Size $f.Length), $f.FullName)
|
||||
}
|
||||
} else {
|
||||
Write-Host " (zadne soubory nad 100 MB)" -ForegroundColor DarkGray
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# --- Navod na skutecne smazani ----------------------------------------------
|
||||
Write-Host "===========================================================" -ForegroundColor Cyan
|
||||
Write-Host " JAK SKUTECNE SMAZAT (spustit RUCNE, az po kontrole):" -ForegroundColor Cyan
|
||||
Write-Host "===========================================================" -ForegroundColor Cyan
|
||||
Write-Host @"
|
||||
# Vyprazdneni kose:
|
||||
Clear-RecycleBin -Force
|
||||
|
||||
# Smazani obsahu uzivatelskeho TEMP (zavri aplikace; nektere zamcene soubory zustanou):
|
||||
Get-ChildItem -LiteralPath `$env:TEMP -Recurse -Force -ErrorAction SilentlyContinue |
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# Smazani konkretni cache slozky (priklad Chrome) - prohlizec MUSI byt zavreny:
|
||||
Remove-Item -LiteralPath "`$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# Spravce mista ve Windows (bez admina): Nastaveni > System > Uloziste
|
||||
"@ -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "Hotovo. Skript NIC nesmazal - jen vypsal prehled." -ForegroundColor Green
|
||||
Reference in New Issue
Block a user