Remote: Ctrl+C Handling im PS-Script + /remote Alias

- CancelKeyPress-Event registrieren → .Cancel() → ReceiveAsync bricht sauber ab
- catch [AggregateException] für CancellationToken in .GetAwaiter().GetResult()
- Event-Handler im finally-Block entfernen
- /remote als Alias für /remote.ps1
This commit is contained in:
Meleki committed 2026-03-11 08:12:56 +01:00
1 parent 0eb9022803
commit 263f438501
2 files changed
+15

No files matched your search

+1
View File
@@ -31,6 +31,7 @@ public static class RemoteEndpoint
// PowerShell-Script ausliefern // PowerShell-Script ausliefern
app.MapGet("/remote.ps1", (Delegate)ServeScript); app.MapGet("/remote.ps1", (Delegate)ServeScript);
app.MapGet("/remote", (Delegate)ServeScript);
} }
private static async Task HandleWebSocket(HttpContext ctx, RemoteConnectionManager mgr) private static async Task HandleWebSocket(HttpContext ctx, RemoteConnectionManager mgr)
+14
View File
@@ -51,6 +51,15 @@ try {
$cts = New-Object System.Threading.CancellationTokenSource $cts = New-Object System.Threading.CancellationTokenSource
$ct = $cts.Token $ct = $cts.Token
# Ctrl+C abfangen → CancellationToken ausloesen
[Console]::TreatControlCAsInput = $false
$cancelHandler = [System.ConsoleCancelEventHandler]{
param($s, $e)
$e.Cancel = $true
$cts.Cancel()
}
[Console]::add_CancelKeyPress($cancelHandler)
# TLS 1.2 erzwingen (fuer aeltere Windows-Versionen) # TLS 1.2 erzwingen (fuer aeltere Windows-Versionen)
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
@@ -152,11 +161,16 @@ try {
} }
} catch [System.OperationCanceledException] { } catch [System.OperationCanceledException] {
# Ctrl+C # Ctrl+C
} catch [System.AggregateException] {
# Kann durch CancellationToken in .GetAwaiter().GetResult() kommen
} catch [System.Net.WebSockets.WebSocketException] { } catch [System.Net.WebSockets.WebSocketException] {
Write-Host " Verbindung verloren." -ForegroundColor Red Write-Host " Verbindung verloren." -ForegroundColor Red
} catch { } catch {
Write-Host " Fehler: $_" -ForegroundColor Red Write-Host " Fehler: $_" -ForegroundColor Red
} finally { } finally {
# Event-Handler entfernen
try { [Console]::remove_CancelKeyPress($cancelHandler) } catch { }
if ($ws -and $ws.State -eq [System.Net.WebSockets.WebSocketState]::Open) { if ($ws -and $ws.State -eq [System.Net.WebSockets.WebSocketState]::Open) {
try { try {
$closeCt = (New-Object System.Threading.CancellationTokenSource(3000)).Token $closeCt = (New-Object System.Threading.CancellationTokenSource(3000)).Token