@symbeon/orbit-devops 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/skills/orbit-devops/SKILL.md +54 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +44 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +33 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +51 -0
- package/.github/dependabot.yml +64 -0
- package/ARCHITECTURE.json +98 -0
- package/AdditionalCleanup.ps1 +70 -0
- package/AnalyzeCursor.ps1 +25 -0
- package/AppDataAudit.ps1 +16 -0
- package/CHANGELOG.md +83 -0
- package/CONFIG_LOG.md +35 -0
- package/CONTRIBUTING.md +203 -0
- package/CategorizedScan.ps1 +37 -0
- package/CategorizedScan_v2.ps1 +38 -0
- package/CheckAnaconda.ps1 +9 -0
- package/CheckAppData.ps1 +8 -0
- package/CheckAppDataRoaming.ps1 +8 -0
- package/CheckBackupSizes.ps1 +17 -0
- package/CheckCacheSize.ps1 +17 -0
- package/CheckNodeModules.ps1 +17 -0
- package/CheckSpace.ps1 +2 -0
- package/CheckTargetSizes.ps1 +17 -0
- package/CheckUserRoot.ps1 +10 -0
- package/DeepStorageAnalysis.ps1 +76 -0
- package/DetailedBloatAudit.ps1 +55 -0
- package/DetailedBloatAudit_v3.ps1 +50 -0
- package/DetailedProcessAudit.ps1 +43 -0
- package/DiagnosticoSistema.ps1 +155 -0
- package/ExecuteCleanup.ps1 +73 -0
- package/ExecuteTotalCleanup.ps1 +86 -0
- package/FinalCategorizedReport.ps1 +49 -0
- package/FinalDeepDive.ps1 +34 -0
- package/ForcePush.ps1 +31 -0
- package/ForensicRAMAudit.ps1 +26 -0
- package/ForensicRAMAudit_UTF8.ps1 +32 -0
- package/ForensicRAMAudit_v2.ps1 +25 -0
- package/ForensicRAMAudit_v3.ps1 +25 -0
- package/FullRAMReport_Local.txt +0 -0
- package/FullRAMReport_UTF8.txt +1400 -0
- package/GiantHunt.ps1 +26 -0
- package/GlobalRAMAudit.ps1 +57 -0
- package/LICENSE +21 -0
- package/MeasureSuspects.ps1 +17 -0
- package/NEXT_STEPS.md +35 -0
- package/Orbit.ps1 +40 -0
- package/PostRebootCleanup.ps1 +60 -0
- package/RAMAudit.ps1 +41 -0
- package/RAMAudit_v2.ps1 +24 -0
- package/README.md +58 -0
- package/RootAudit.ps1 +14 -0
- package/RunDiagnostic.ps1 +119 -0
- package/RunDiagnosticSimple.ps1 +42 -0
- package/SECURITY.md +67 -0
- package/SETUP.md +34 -0
- package/SafeSurgery.ps1 +69 -0
- package/ScanPrograms.ps1 +13 -0
- package/ScanRepoWaste.ps1 +45 -0
- package/ScanStorage.ps1 +41 -0
- package/ScanTargets.ps1 +39 -0
- package/SimpleSurgicalAudit.ps1 +22 -0
- package/SurgicalBloatAudit.ps1 +35 -0
- package/SurgicalScan.ps1 +28 -0
- package/SystemDiagnostic.ps1 +588 -0
- package/SystemDiagnosticSimple.ps1 +141 -0
- package/SystemDiagnosticUser.ps1 +92 -0
- package/SystemDiagnosticUser_v2.ps1 +36 -0
- package/UserAudit.ps1 +23 -0
- package/bin/orbit.js +99 -0
- package/check_environment.ps1 +104 -0
- package/deep_downloads_org_log.txt +15 -0
- package/diagnostic_error.txt +83 -0
- package/diskpart_log.txt +0 -0
- package/docs/DEPRECATED_USERNAME_CHANGE.md +138 -0
- package/docs/PROJECT_STRUCTURE.md +156 -0
- package/downloads_audit.txt +32 -0
- package/downloads_audit_clear.txt +27 -0
- package/downloads_org_log.txt +85 -0
- package/mcp/README.md +61 -0
- package/mcp/server.py +109 -0
- package/package.json +39 -0
- package/scripts/mac/diagnostic.sh +46 -0
- package/scripts/stack/Push-Stack.ps1 +41 -0
- package/scripts/stack/SnapshotEnv.ps1 +22 -0
- package/scripts/utils/DeepOrganizeDownloads.ps1 +82 -0
- package/scripts/utils/OrganizeDownloads.ps1 +40 -0
- package/scripts/wsl/CompactWSL.ps1 +60 -0
- package/setup_environment.ps1 +59 -0
- package/sizes.txt +6 -0
- package/verify_environment.ps1 +46 -0
package/SafeSurgery.ps1
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
2
|
+
|
|
3
|
+
Write-Host "=== STARTING SAFE SURGERY ===" -ForegroundColor Cyan
|
|
4
|
+
|
|
5
|
+
# 1. REMOVE BACKUPS
|
|
6
|
+
$targets = @(
|
|
7
|
+
"$env:USERPROFILE\Desktop\PROJETOS\02_ORGANIZATIONS\MOBILIDADE\guardrive-core-backup",
|
|
8
|
+
"$env:USERPROFILE\Desktop\PROJETOS\05_PLATFORMS\SYMBEON-AI\SYMBEON\backup"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
foreach ($path in $targets) {
|
|
12
|
+
if (Test-Path $path) {
|
|
13
|
+
Write-Host "Removing $path ..." -ForegroundColor Yellow
|
|
14
|
+
# Retry loop for stubborn files
|
|
15
|
+
for ($i = 0; $i -lt 3; $i++) {
|
|
16
|
+
Remove-Item $path -Recurse -Force -ErrorAction SilentlyContinue
|
|
17
|
+
Start-Sleep -Seconds 2
|
|
18
|
+
if (-not (Test-Path $path)) { break }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (Test-Path $path) {
|
|
22
|
+
Write-Host "FAILED to fully remove $path (Permission/Lock issue)" -ForegroundColor Red
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
Write-Host "REMOVED $path" -ForegroundColor Green
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
Write-Host "Target not found (already gone?): $path"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# 2. COMPACT DOCKER
|
|
34
|
+
Write-Host "`n=== COMPACTING DOCKER ===" -ForegroundColor Cyan
|
|
35
|
+
Write-Host "Stopping WSL..."
|
|
36
|
+
wsl --shutdown
|
|
37
|
+
|
|
38
|
+
$vhdx = "$env:USERPROFILE\AppData\Local\Docker\wsl\disk\docker_data.vhdx"
|
|
39
|
+
if (Test-Path $vhdx) {
|
|
40
|
+
if (Get-Command Optimize-VHD -ErrorAction SilentlyContinue) {
|
|
41
|
+
Write-Host "Using Optimize-VHD (Hyper-V)..." -ForegroundColor Yellow
|
|
42
|
+
try {
|
|
43
|
+
Optimize-VHD -Path $vhdx -Mode Full
|
|
44
|
+
Write-Host "Compaction Complete." -ForegroundColor Green
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
Write-Host "Optimize-VHD failed: $_" -ForegroundColor Red
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
Write-Host "'Optimize-VHD' not found. Trying Diskpart..." -ForegroundColor Yellow
|
|
52
|
+
$script = "select vdisk file=`"$vhdx`"`ncompact vdisk`ndetach vdisk"
|
|
53
|
+
$script | Out-File -FilePath "compact_script.txt" -Encoding ASCII
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
diskpart /s "compact_script.txt" | Out-File "diskpart_log.txt"
|
|
57
|
+
Write-Host "Diskpart execution attempted. Check diskpart_log.txt" -ForegroundColor Green
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
Write-Host "Diskpart failed: $_" -ForegroundColor Red
|
|
61
|
+
}
|
|
62
|
+
Remove-Item "compact_script.txt" -ErrorAction SilentlyContinue
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
Write-Host "Docker VHDX not found at expected path." -ForegroundColor Red
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Write-Host "`n=== SURGERY COMPLETE ===" -ForegroundColor Cyan
|
package/ScanPrograms.ps1
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
$paths = @("C:\Program Files", "C:\Program Files (x86)", "C:\XboxGames", "C:\Games")
|
|
3
|
+
foreach ($p in $paths) {
|
|
4
|
+
if (Test-Path $p) {
|
|
5
|
+
Write-Host "Scanning $p..."
|
|
6
|
+
Get-ChildItem $p -Directory -ErrorAction SilentlyContinue | ForEach-Object {
|
|
7
|
+
$s = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
|
|
8
|
+
if ($s -gt 1) {
|
|
9
|
+
Write-Host "$($_.FullName): $([math]::Round($s, 2)) GB"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
2
|
+
$root = "$env:USERPROFILE\Desktop\PROJETOS"
|
|
3
|
+
$wastePatterns = @("node_modules", "venv", ".venv", "target", "dist", "build", ".git")
|
|
4
|
+
$results = @()
|
|
5
|
+
|
|
6
|
+
Write-Host "=== SCANNING REPOSITORIES FOR WASTE ===" -ForegroundColor Cyan
|
|
7
|
+
Write-Host "Scanning $root (This may take a moment)..."
|
|
8
|
+
|
|
9
|
+
# Get all subdirectories in PROJETOS (Depth 2: Category -> Repo)
|
|
10
|
+
$repos = Get-ChildItem -Path $root -Directory -Depth 2 -ErrorAction SilentlyContinue
|
|
11
|
+
|
|
12
|
+
foreach ($repo in $repos) {
|
|
13
|
+
# Skip if it's not a repo level (heuristic)
|
|
14
|
+
if ($repo.FullName.Split("\").Count -lt 6) { continue }
|
|
15
|
+
|
|
16
|
+
$repoWaste = 0
|
|
17
|
+
$details = @()
|
|
18
|
+
|
|
19
|
+
foreach ($pattern in $wastePatterns) {
|
|
20
|
+
$path = Join-Path $repo.FullName $pattern
|
|
21
|
+
if (Test-Path $path) {
|
|
22
|
+
$size = Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
|
|
23
|
+
if ($size.Sum -gt 100MB) {
|
|
24
|
+
$mb = [math]::Round($size.Sum / 1MB, 0)
|
|
25
|
+
$repoWaste += $size.Sum
|
|
26
|
+
$details += "$pattern ($mb MB)"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if ($repoWaste -gt 200MB) {
|
|
32
|
+
$totalMB = [math]::Round($repoWaste / 1MB, 0)
|
|
33
|
+
$results += [PSCustomObject]@{
|
|
34
|
+
Repo = $repo.Name
|
|
35
|
+
Path = $repo.FullName
|
|
36
|
+
WasteMB = $totalMB
|
|
37
|
+
Details = ($details -join ", ")
|
|
38
|
+
}
|
|
39
|
+
Write-Host "." -NoNewline -ForegroundColor Gray
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
Write-Host "`n"
|
|
44
|
+
|
|
45
|
+
$results | Sort-Object WasteMB -Descending | Select-Object -First 20 | Format-Table -AutoSize
|
package/ScanStorage.ps1
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
3
|
+
|
|
4
|
+
function Get-FolderSize {
|
|
5
|
+
param($Path)
|
|
6
|
+
if (Test-Path $Path) {
|
|
7
|
+
$measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
|
|
8
|
+
$sizeGB = [math]::Round($measure.Sum / 1GB, 2)
|
|
9
|
+
Write-Host "Folder: $Path - Size: $sizeGB GB"
|
|
10
|
+
return $measure.Sum
|
|
11
|
+
}
|
|
12
|
+
return 0
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
Write-Host "=== SCANNING STORAGE ==="
|
|
16
|
+
Write-Host "Checking main user folders..."
|
|
17
|
+
|
|
18
|
+
$folders = @(
|
|
19
|
+
"$env:USERPROFILE\Downloads",
|
|
20
|
+
"$env:USERPROFILE\AppData\Local\Temp",
|
|
21
|
+
"$env:USERPROFILE\Desktop",
|
|
22
|
+
"$env:USERPROFILE\Documents",
|
|
23
|
+
"$env:USERPROFILE\Pictures",
|
|
24
|
+
"$env:USERPROFILE\Videos"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
foreach ($f in $folders) {
|
|
28
|
+
Get-FolderSize -Path $f
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Write-Host "`n=== TOP 20 LARGEST FILES (User Home) ==="
|
|
32
|
+
# This might take a while, so we limit depth or scope if needed.
|
|
33
|
+
# For now, let's look at the root of User home and 2 levels deep to avoid massive scan times,
|
|
34
|
+
# or just scan Downloads and Documents specifically for large files.
|
|
35
|
+
Get-ChildItem "$env:USERPROFILE" -Recurse -File -ErrorAction SilentlyContinue |
|
|
36
|
+
Sort-Object Length -Descending |
|
|
37
|
+
Select-Object -First 20 |
|
|
38
|
+
ForEach-Object {
|
|
39
|
+
$sizeMB = [math]::Round($_.Length / 1MB, 2)
|
|
40
|
+
Write-Host "File: $($_.FullName) - $sizeMB MB"
|
|
41
|
+
}
|
package/ScanTargets.ps1
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
3
|
+
|
|
4
|
+
Write-Host "=== TARGETED SCAN ==="
|
|
5
|
+
|
|
6
|
+
# 1. Check Docker/WSL
|
|
7
|
+
Write-Host "`n--- DOCKER / WSL ---"
|
|
8
|
+
if (Get-Command docker -ErrorAction SilentlyContinue) {
|
|
9
|
+
docker system df
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
Write-Host "Docker not found/running."
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
# 2. Check Large AppData Folders
|
|
16
|
+
Write-Host "`n--- APPDATA (Top 10 Folders) ---"
|
|
17
|
+
$appDataLocal = "$env:USERPROFILE\AppData\Local"
|
|
18
|
+
if (Test-Path $appDataLocal) {
|
|
19
|
+
Get-ChildItem $appDataLocal -Directory -ErrorAction SilentlyContinue | ForEach-Object {
|
|
20
|
+
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB
|
|
21
|
+
[PSCustomObject]@{ Name = $_.Name; SizeMB = [math]::Round($size, 0) }
|
|
22
|
+
} | Sort-Object SizeMB -Descending | Select-Object -First 10 | Format-Table -AutoSize
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# 3. Check Downloads for large files (>100MB)
|
|
26
|
+
Write-Host "`n--- LARGE DOWNLOADS (>100MB) ---"
|
|
27
|
+
Get-ChildItem "$env:USERPROFILE\Downloads" -File | Where-Object { $_.Length -gt 100MB } |
|
|
28
|
+
Sort-Object Length -Descending |
|
|
29
|
+
ForEach-Object {
|
|
30
|
+
Write-Host "$($_.Name) - $([math]::Round($_.Length/1MB, 0)) MB"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# 4. Search for node_modules in Desktop (can be slow, limiting depth)
|
|
34
|
+
Write-Host "`n--- NODE_MODULES SEARCH (Desktop - Depth 3) ---"
|
|
35
|
+
Get-ChildItem "$env:USERPROFILE\Desktop" -Directory -Recurse -Depth 3 -Filter "node_modules" -ErrorAction SilentlyContinue |
|
|
36
|
+
ForEach-Object {
|
|
37
|
+
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB
|
|
38
|
+
Write-Host "Found: $($_.FullName) - $([math]::Round($size, 0)) MB"
|
|
39
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
2
|
+
$userPath = [System.IO.Path]::Combine($env:USERPROFILE, "Desktop", "PROJETOS")
|
|
3
|
+
$targets = @(
|
|
4
|
+
"03_AI_AGENTS\VIREON\target",
|
|
5
|
+
"04_DEVELOPER_TOOLS\ARKITECT\orchestrator_core\target",
|
|
6
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\backend\target",
|
|
7
|
+
"05_PLATFORMS\SYMBEON-ECOSYSTEM\node_modules",
|
|
8
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\frontend\node_modules",
|
|
9
|
+
"00_ECOSYSTEM_COMERCIAL\SEVE-FRAMEWORK\SEVE-FRAMEWORK\node_modules",
|
|
10
|
+
"00_ECOSYSTEM_COMERCIAL\OPTIMUS\core\node_modules",
|
|
11
|
+
"01_CORE_SYSTEMS\mcp-ecosystem\node_modules"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
Write-Host "=== SURGICAL BLOAT REPORT (v2) ==="
|
|
15
|
+
foreach ($t in $targets) {
|
|
16
|
+
$full = Join-Path $userPath $t
|
|
17
|
+
if (Test-Path $full) {
|
|
18
|
+
$size = (Get-ChildItem $full -Recurse -File -Force | Measure-Object -Property Length -Sum).Sum
|
|
19
|
+
$gb = [math]::Round($size / 1GB, 2)
|
|
20
|
+
Write-Host "$t : $gb GB"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
2
|
+
$userPath = [System.IO.Path]::Combine($env:USERPROFILE, "Desktop", "PROJETOS")
|
|
3
|
+
|
|
4
|
+
# Confirmed heavy hitters from find_by_name
|
|
5
|
+
$targets = @(
|
|
6
|
+
"03_AI_AGENTS\VIREON\target",
|
|
7
|
+
"04_DEVELOPER_TOOLS\ARKITECT\orchestrator_core\target",
|
|
8
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\backend\target",
|
|
9
|
+
"05_PLATFORMS\SYMBEON-ECOSYSTEM\node_modules",
|
|
10
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\frontend\node_modules",
|
|
11
|
+
"00_ECOSYSTEM_COMERCIAL\OPTIMUS\core\node_modules",
|
|
12
|
+
"00_ECOSYSTEM_COMERCIAL\SEVE-FRAMEWORK\SEVE-FRAMEWORK\node_modules",
|
|
13
|
+
"01_CORE_SYSTEMS\mcp-ecosystem\node_modules",
|
|
14
|
+
"02_ORGANIZATIONS\SAGE-X\node_modules",
|
|
15
|
+
"03_AI_AGENTS\AIDEN_PROJECT\venv"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
Write-Host "=== SURGICAL BLOAT AUDIT ===" -ForegroundColor Cyan
|
|
19
|
+
$report = @()
|
|
20
|
+
foreach ($t in $targets) {
|
|
21
|
+
$full = Join-Path $userPath $t
|
|
22
|
+
if (Test-Path $full) {
|
|
23
|
+
Write-Host "Measuring $t ..." -NoNewline
|
|
24
|
+
$size = (Get-ChildItem $full -Recurse -File -Force | Measure-Object -Property Length -Sum).Sum
|
|
25
|
+
$report += [PSCustomObject]@{
|
|
26
|
+
Categoria = $t.Split('\')[0]
|
|
27
|
+
Projeto = $t.Split('\')[1]
|
|
28
|
+
Tipo = $t.Split('\')[-1]
|
|
29
|
+
"Size(GB)" = [math]::Round($size / 1GB, 2)
|
|
30
|
+
}
|
|
31
|
+
Write-Host " Done."
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
$report | Sort-Object "Size(GB)" -Descending | Format-Table -AutoSize
|
package/SurgicalScan.ps1
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
2
|
+
$root = "c:\Users\João\Desktop\PROJETOS"
|
|
3
|
+
$targets = @(
|
|
4
|
+
"03_AI_AGENTS\VIREON\target",
|
|
5
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\backend\target",
|
|
6
|
+
"05_PLATFORMS\SYMBEON-ECOSYSTEM\node_modules",
|
|
7
|
+
"02_ORGANIZATIONS\VAREJO\GuardFlow\frontend\node_modules",
|
|
8
|
+
"00_ECOSYSTEM_COMERCIAL\SEVE-FRAMEWORK\SEVE-FRAMEWORK\node_modules",
|
|
9
|
+
"00_ECOSYSTEM_COMERCIAL\OPTIMUS\core\node_modules",
|
|
10
|
+
"01_CORE_SYSTEMS\mcp-ecosystem\node_modules"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
Write-Host "=== SURGICAL BLOAT REPORT ===" -ForegroundColor Cyan
|
|
14
|
+
$report = @()
|
|
15
|
+
|
|
16
|
+
foreach ($t in $targets) {
|
|
17
|
+
$full = "$root\$t"
|
|
18
|
+
if (Test-Path $full) {
|
|
19
|
+
# Fast size check
|
|
20
|
+
$size = Get-ChildItem $full -Recurse -Force | Measure-Object -Property Length -Sum
|
|
21
|
+
$report += [PSCustomObject]@{
|
|
22
|
+
Path = $t
|
|
23
|
+
"Size(GB)" = [math]::Round($size.Sum / 1GB, 2)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
$report | Sort-Object "Size(GB)" -Descending | Format-Table -AutoSize
|