param([ValidateSet('production', 'demo')][string]$Mode = 'production') . (Join-Path $PSScriptRoot 'sense-common.ps1') try { $root = Get-SensePackageRoot $configName = if ($Mode -eq 'demo') { 'sense.demo.env' } else { 'sense.env' } $config = Join-Path $root "config\$configName" Import-SenseEnvironment -Path $config $port = [int](Get-SenseEnvironmentValue -Name 'SENSE_PORT' -Default '18080') $connection = Get-NetTCPConnection -State Listen -LocalPort $port -ErrorAction SilentlyContinue | Select-Object -First 1 if (-not $connection) { Write-Host "Sense is not listening on port $port."; exit 0 } $process = Get-CimInstance Win32_Process -Filter "ProcessId = $($connection.OwningProcess)" $expected = [IO.Path]::GetFullPath((Join-Path $root 'sense.exe')) if (-not $process -or [IO.Path]::GetFullPath($process.ExecutablePath) -ne $expected) { throw "Port $port belongs to another process; it was not stopped." } & taskkill.exe /PID $process.ProcessId /T /F | Out-Null if ($LASTEXITCODE -ne 0) { throw 'Failed to stop the Sense process tree.' } Write-Host 'Sense and its managed child processes were stopped.' exit 0 } catch { Write-Error $_.Exception.Message exit 1 }