Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Plink in PowerShell-Thread-Job stuerzt ab

49 views
Skip to first unread message

Christoph Schneegans

unread,
Mar 1, 2021, 6:54:27 AM3/1/21
to
Hallo allerseits!

Ich möchte mit einem PowerShell-Skript einige Linux-Server überwachen
und dazu das Cmdlet "Start-ThreadJob" und PuTTYs Plink verwenden, etwa
so:

$job = Start-ThreadJob -ScriptBlock {
& "$env:ProgramFiles\PuTTY\plink.exe" -batch -load "server.example" "df /";
};

Die Ausgabe des Remote-Befehls lässt sich dann gut in PowerShell
weiterverarbeiten. Wenn ich jedoch statt "df /" den Befehl "apt update"
angebe, stürzt die ganze PowerShell-Sitzung (gefühlt mit einer
Wahrscheinlichkeit größer als 50%, also gut reproduzierbar) nach wenigen
Sekunden ab:

An error has occurred that was not properly handled. Additional
information is shown below. The PowerShell process will exit. Unhandled
exception. System.InvalidOperationException: Cannot read keys when
either application does not have a console or when console input has
been redirected. Try Console.Read.
at System.ConsolePal.ReadKey(Boolean intercept)
at System.Console.ReadKey(Boolean intercept)
at Microsoft.PowerShell.Internal.VirtualTerminal.ReadKey()
at Microsoft.PowerShell.PSConsoleReadLine.ReadOneOrMoreKeys()
at Microsoft.PowerShell.PSConsoleReadLine.ReadKeyThreadProc()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Für sich genommen läuft Plink in PowerShell völlig stabil. Auch
Thread-Jobs allein funktionieren zuverlässig. Nur Plink in einem
Thread-Job – und dann auch nur zusammen mit dem passenden Befehl auf dem
Remote-System – will offenbar nicht. Irgendwelche Hinweise, mit denen
ich den Bug-Report wenigstens an den richtigen Adressaten schicken kann?

--
<https://schneegans.de/windows/no-8.3/> · Windows ohne PROGRA~1

Marcel Logen

unread,
Mar 3, 2021, 5:17:13 AM3/3/21
to
Christoph Schneegans in de.comp.os.ms-windows.misc:

>Für sich genommen läuft Plink in PowerShell völlig stabil. Auch
>Thread-Jobs allein funktionieren zuverlässig. Nur Plink in einem
>Thread-Job – und dann auch nur zusammen mit dem passenden Befehl auf dem
>Remote-System – will offenbar nicht. Irgendwelche Hinweise, mit denen
>ich den Bug-Report wenigstens an den richtigen Adressaten schicken kann?

Ich denke, das liegt an "apt".

Nur so als Idee:

Wenn ich "apt" mit einer pipeline ("|") oder einer
redirection (">") verwende, dann kommt die Meldung

| WARNING: apt does not have a stable CLI interface.
| Use with caution in scripts.

Und in der man page von "apt" steht

| apt provides a high-level commandline interface for
| the package management system. It is intended as an
| end user interface and enables some options better
| suited for interactive usage by default compared to
| more specialized APT tools like apt-get(8) and
| apt-cache(8).

Vielleicht solltest Du es mal mit "apt-get" versuchen.

Marcel
--
╭─╮ ╭─────────────╮ ╭─╮ ╭───╮ ╭─╮ ╭─╮ ╭─────╮ ╭─╮
─╯ │ ╰──────────╮ ╰───╯ │ │ │ ╭────╮ │ ╰──╯ ╰─╯ ╰──╯ ╰─╮
╭─╯ ╭───────╮ │ ╭─────╯ │ │ │ ╭─╯ ╰─────╮ ╭────╯ ╭─
╰───╯ ╰───╯ ╰───────╯ ╰───╯ ╰──────────╯ ╰────────╯

Christoph Schneegans

unread,
Mar 7, 2021, 2:02:08 PM3/7/21
to
Marcel Logen schrieb:

> Ich denke, das liegt an "apt".

Na ja, schon irgendwie.

> Vielleicht solltest Du es mal mit "apt-get" versuchen.

Der Fehler tritt mit "apt-get update" auch auf, wenn auch mit geringerer
Frequenz. Mit "apt --quiet update" geht es noch besser – aber eben nicht
gut. Ich habe nun einen Bug-Report an die PuTTY-Entwickler geschrieben.

--
<https://schneegans.de/windows/safer/> · SAFER mit Windows

Christoph Schneegans

unread,
Mar 8, 2021, 5:56:20 PM3/8/21
to
Christoph "Ingrid" Schneegans schrieb:

> Ich habe nun einen Bug-Report an die PuTTY-Entwickler geschrieben.

Simon Tatham himself hat mir bereits geantwortet und angeregt, die
Standard-Eingabe auf das Null-Gerät oder eine leere Datei umzuleiten,
was in der Windows-Shell ja per

plink.exe … < nul

funktioniert. Das geht in PowerShell so nicht, aber mit Start-Process
und einer leeren Datei tut es:

Start-Process `
-FilePath "$env:ProgramFiles\PuTTY\plink.exe" `
-RedirectStandardInput 'empty.txt' `
-RedirectStandardError 'error.txt' `
-RedirectStandardOutput 'out.txt' `
-ArgumentList '-batch', '-load', 'server.example', 'apt get' `
-Wait `
-NoNewWindow;
Get-Content 'error.txt', 'out.txt';

Läuft innerhalb von Start-ThreadJob absolut stabil. :-)
0 new messages