# Richtet die Windows-Aufgabe "Trading Plattform - Abendkontrolle" ein oder entfernt sie. # Koordinator-Werkzeug, nicht fuers Repo. Auftrag Pascal 2026-09-24: taegliche Abendkontrolle, # dauerhaft, uebersteht Neustarts, blockiert keine Updates von Claude Code oder Desktop. # # Zwei Ausloeser: werktags 22:45 (nach der Tagesauswertung um 22:20) oder statt dessen 23:15, sobald ein Teil vom # Docker-Host kommt (-Quelle oder -QuelleIbkr dockerhost, seit Paket DH), und fuenf Minuten nach # jeder Anmeldung (holt einen verpassten Abend nach; abendkontrolle.py prueft nur Tage ohne # Ergebnisdatei). # Nur bei angemeldetem Benutzer (Interactive): WSL und der ganze Paper-Betrieb brauchen die Anmeldung # ohnehin (Aufgabe "Trading Plattform - WSL wachhalten"). pythonw.exe startet ohne Fenster. # Voller Interpreterpfad: -Execute "python" endet in der Aufgabenplanung mit 0x80070002. # # Aufruf: powershell -NoProfile -File abendkontrolle_einrichten.ps1 [-Aktion einrichten|entfernen] # [-Quelle wsl|dockerhost] [-QuelleIbkr wsl|dockerhost] param( [ValidateSet("einrichten", "entfernen")] [string]$Aktion = "einrichten", # Seit Paket DH: wsl (Vorgabe) prueft in WSL wie bisher; dockerhost liest das Ergebnis des # Docker-Hosts ueber SSH, werktags erst um 23:15 (der Host prueft um 16:30 New Yorker Zeit). [ValidateSet("wsl", "dockerhost")] [string]$Quelle = "wsl", # Die Quelle fuer den Teil ibkr; ohne Angabe dieselbe wie -Quelle. Die IBKR-Instanz zieht an # einem eigenen Abend um (Umzugs-Drehbuch DH, Phase 7). [ValidateSet("wsl", "dockerhost")] [string]$QuelleIbkr ) $Name = "Trading Plattform - Abendkontrolle" if ($Aktion -eq "entfernen") { Unregister-ScheduledTask -TaskName $Name -Confirm:$false return } $Py = "C:\Users\Pascal Michel\AppData\Local\Programs\Python\Python313\pythonw.exe" $Skript = "D:\Claude\.vault-tools\trading-plattform-pruefung\abendkontrolle.py" if (-not (Test-Path $Py)) { throw "Interpreter fehlt: $Py" } if (-not (Test-Path $Skript)) { throw "Skript fehlt: $Skript" } $Benutzer = "$env:USERDOMAIN\$env:USERNAME" if (-not $QuelleIbkr) { $QuelleIbkr = $Quelle } $Aufruf = New-ScheduledTaskAction -Execute $Py -Argument ('"' + $Skript + '" --quelle ' + $Quelle + ' --quelle-ibkr ' + $QuelleIbkr) -WorkingDirectory "D:\Claude" if ($Quelle -eq "dockerhost" -or $QuelleIbkr -eq "dockerhost") { $Uhrzeit = "23:15" } else { $Uhrzeit = "22:45" } $Abends = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday, Tuesday, Wednesday, Thursday, Friday -At $Uhrzeit $Anmeldung = New-ScheduledTaskTrigger -AtLogOn -User $Benutzer $Anmeldung.Delay = "PT5M" $Wer = New-ScheduledTaskPrincipal -UserId $Benutzer -LogonType Interactive -RunLevel Limited $Regeln = New-ScheduledTaskSettingsSet -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries ` -ExecutionTimeLimit (New-TimeSpan -Minutes 45) -MultipleInstances IgnoreNew Register-ScheduledTask -TaskName $Name -Action $Aufruf -Trigger @($Abends, $Anmeldung) -Principal $Wer ` -Settings $Regeln -Force ` -Description "Abendkontrolle des Paper-Betriebs: liest nur, schreibt in die Tagesnotiz, meldet Befunde per ntfy. Koordinator-Werkzeug, siehe abendkontrolle.py." | Out-Null $Aufgabe = Get-ScheduledTask -TaskName $Name "{0}: {1}" -f $Aufgabe.TaskName, $Aufgabe.State $Aufgabe.Triggers | ForEach-Object { "Ausloeser: {0} {1} {2}" -f $_.CimClass.CimClassName, $_.StartBoundary, $_.Delay } "Naechster Lauf: {0}" -f (Get-ScheduledTaskInfo -TaskName $Name).NextRunTime "Quellen: {0} (alpaca), {1} (ibkr)" -f $Quelle, $QuelleIbkr