54 lines
1.6 KiB
PowerShell
54 lines
1.6 KiB
PowerShell
param(
|
|
[int]$Port = 56000
|
|
)
|
|
|
|
$killedAny = $false
|
|
|
|
# Try modern cmdlet first.
|
|
$connections = Get-NetTCPConnection -LocalPort $Port -State Listen -ErrorAction SilentlyContinue
|
|
if ($connections) {
|
|
$pids = $connections | Select-Object -ExpandProperty OwningProcess -Unique
|
|
foreach ($procId in $pids) {
|
|
try {
|
|
Stop-Process -Id $procId -Force -ErrorAction Stop
|
|
Write-Host "Stopped process $procId listening on port $Port."
|
|
$killedAny = $true
|
|
}
|
|
catch {
|
|
Write-Warning "Failed to stop process ${procId}: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Fallback for environments where Get-NetTCPConnection is unavailable.
|
|
if (-not $killedAny) {
|
|
$netstatLines = netstat -ano | Select-String ":$Port\s"
|
|
$listenLines = $netstatLines | Where-Object { $_.Line -match "LISTENING" }
|
|
|
|
$fallbackPids = @()
|
|
foreach ($line in $listenLines) {
|
|
$parts = ($line.Line -replace "\s+", " ").Trim().Split(" ")
|
|
if ($parts.Length -ge 5) {
|
|
$fallbackPids += $parts[-1]
|
|
}
|
|
}
|
|
|
|
$fallbackPids = $fallbackPids | Sort-Object -Unique
|
|
foreach ($pidText in $fallbackPids) {
|
|
if ($pidText -match "^\d+$") {
|
|
try {
|
|
Stop-Process -Id ([int]$pidText) -Force -ErrorAction Stop
|
|
Write-Host "Stopped process $pidText listening on port $Port."
|
|
$killedAny = $true
|
|
}
|
|
catch {
|
|
Write-Warning "Failed to stop process ${pidText}: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (-not $killedAny) {
|
|
Write-Host "No listening process found on port $Port."
|
|
}
|