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:
1 parent
0eb9022803
commit
263f438501
2 files changed
+15
No files matched your search
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user