# Beenden darf nie am Beenden scheitern: Ist ein Prozess schon weg,
# meldet taskkill das auf der Fehlerausgabe. Bei aufrufenden Skripten mit
# "Stop" als Fehlerverhalten reisst das sonst den ganzen Neustart ab.
$ErrorActionPreference = 'Continue'

$repo = Join-Path $env:USERPROFILE 'TibiaPilotNG'
$python = Join-Path $repo '.venv\Scripts\python.exe'

& $python (Join-Path $repo 'tools\Release-Arduino.py') 2>$null | Out-Null

Stop-ScheduledTask -TaskName 'TibiaPilotNG' -ErrorAction SilentlyContinue

# JEDEN Bot beenden, nicht nur den aus der eigenen Umgebung.
#
# Hier stand frueher ein Filter auf ".venv\Scripts\python*". Ein Bot, der
# mit dem Python des Systems gestartet wurde, ueberlebte damit jeden
# Stopp. Gefunden mit zwei gleichzeitig laufenden Bots - beide steuerten
# Maus und Tastatur, der Charakter blieb haengen und flog mehrfach vom
# Server. Darum wird jetzt jeder Python-Prozess beendet, der main.py aus
# diesem Ordner ausfuehrt, egal mit welcher Python-Installation.
$muster = [regex]::Escape($repo)
Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | Where-Object {
    $_.Name -like 'python*.exe' -and
    [string]$_.CommandLine -match 'main\.py' -and
    ([string]$_.CommandLine -match $muster -or
     [string]$_.ExecutablePath -match $muster -or
     # Wird main.py ohne Pfad gestartet, steht der Ordner nur im
     # Arbeitsverzeichnis - das ist ueber CIM nicht sichtbar. Solche
     # Prozesse werden trotzdem beendet: ein "python main.py" gehoert auf
     # diesem Rechner zum Bot.
     [string]$_.CommandLine -match '^\S*python\w*\.exe"?\s+main\.py\s*$')
} | ForEach-Object {
    try {
        Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
    } catch {}
}
