# Cleanup old releases under E:\wwwroot; keep current targets only $ErrorActionPreference = 'Stop' $Root = 'E:\wwwroot' function Get-JunctionTarget([string]$link) { if (-not (Test-Path $link)) { return $null } $item = Get-Item $link -Force if ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) { cmd /c ("dir /AL `"$link`"") | Out-Null # Resolve via Get-Item Target if available try { if ($item.Target -and $item.Target.Count -gt 0) { return [string]$item.Target[0] } } catch {} } # Fallback: read active-release.json return $null } $ptrPath = Join-Path $Root 'ops\active-release.json' $keepAgent = $null $keepAdmin = $null if (Test-Path $ptrPath) { $ptr = Get-Content $ptrPath -Raw | ConvertFrom-Json if ($ptr.agentHome) { $keepAgent = [string]$ptr.agentHome } if ($ptr.adminRelease) { $keepAdmin = [string]$ptr.adminRelease } } $agentCurrent = Join-Path $Root 'agent\current' $adminCurrent = Join-Path $Root 'admin\current' $t1 = Get-JunctionTarget $agentCurrent $t2 = Get-JunctionTarget $adminCurrent if ($t1) { $keepAgent = $t1 } if ($t2) { $keepAdmin = $t2 } # Resolve junction via fsutil / dir listing function Resolve-Link([string]$p) { if (-not (Test-Path $p)) { return $null } $out = cmd /c ("fsutil reparsepoint query `"$p`"") 2>$null # Alternative: (Get-Item).Target $i = Get-Item $p -Force if ($i.LinkType -eq 'Junction' -or ($i.Attributes -band [IO.FileAttributes]::ReparsePoint)) { if ($i.Target) { return ([string]$i.Target[0]) } } return $null } $ka = Resolve-Link $agentCurrent $kb = Resolve-Link $adminCurrent if ($ka) { $keepAgent = $ka } if ($kb) { $keepAdmin = $kb } Write-Output ('keepAgent=' + $keepAgent) Write-Output ('keepAdmin=' + $keepAdmin) $removed = @() # agent releases: E:\wwwroot\agent\releases\\agent or $agentRelRoot = Join-Path $Root 'agent\releases' if (Test-Path $agentRelRoot) { Get-ChildItem $agentRelRoot -ErrorAction SilentlyContinue | Where-Object { $_.PSIsContainer } | ForEach-Object { $rel = $_.FullName $agentHome = Join-Path $rel 'agent' $isKeep = $false if ($keepAgent) { if ($keepAgent -eq $agentHome -or $keepAgent -eq $rel -or $keepAgent.StartsWith($rel + '\')) { $isKeep = $true } } if (-not $isKeep) { Write-Output ('REMOVE agent ' + $rel) Remove-Item $rel -Recurse -Force $removed += $rel } else { Write-Output ('KEEP agent ' + $rel) } } } $adminRelRoot = Join-Path $Root 'admin\releases' if (Test-Path $adminRelRoot) { Get-ChildItem $adminRelRoot -ErrorAction SilentlyContinue | Where-Object { $_.PSIsContainer } | ForEach-Object { $rel = $_.FullName $dist = Join-Path $rel 'dist' $isKeep = $false if ($keepAdmin) { if ($keepAdmin -eq $dist -or $keepAdmin -eq $rel -or $keepAdmin.StartsWith($rel + '\')) { $isKeep = $true } } if (-not $isKeep) { Write-Output ('REMOVE admin ' + $rel) Remove-Item $rel -Recurse -Force $removed += $rel } else { Write-Output ('KEEP admin ' + $rel) } } } # old env backups older than keep recent 2 Get-ChildItem $Root -Filter '.env.bak*' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -Skip 2 | ForEach-Object { Write-Output ('REMOVE bak ' + $_.Name) Remove-Item $_.FullName -Force $removed += $_.FullName } # incoming zips older $incoming = 'C:\Users\ytd_extdev_0903\incoming' if (Test-Path $incoming) { Get-ChildItem $incoming -Include '*.zip','jeecg-system-start*.jar' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | ForEach-Object { Write-Output ('REMOVE incoming ' + $_.Name) Remove-Item $_.FullName -Force -ErrorAction SilentlyContinue } } Write-Output ('removed_count=' + $removed.Count) Write-Output 'CLEANUP_OK' # ports sanity: must not touch yutongda foreach ($x in 8080,8180,8910) { $c = Get-NetTCPConnection -LocalPort $x -State Listen -EA SilentlyContinue | Select-Object -First 1 if ($c) { Write-Output ("port $x LISTEN") } else { Write-Output ("port $x down") } }