gruenspecht
Goto Top

LASTEXITCODE unter PowerShell nicht richtig verstanden

Um den Bluetooth-Status eines meiner Geräte zu ermitteln, nutze ich BluetoothView v1.66 von NirSoft. http://www.nirsoft.net/utils/bluetooth_viewer.html

Das Tool bietet dazu folgenden Parameter an:

/try_to_connect <MAC Address>
Try to connect to a specific Bluetooth device. If the connect process was
successful, the .exe returns 0. Otherwise, it returns error code.
Example:
BluetoothView.exe /try_to_connect 00:23:05:a1:22:f1

In einer Batch-Datei habe ich folgende Abfrage definiert:

BluetoothView.exe /try_to_connect 00:23:05:a1:22:f1
echo %errorlevel%

Das funktioniert auch gut.

Nun wollte ich das aber mittels PowerShell machen. Nur so zur Übung, weil ich mich ein wenige in PowerShell einarbeiten wollte.

Meine Idee war den "Return-Status" in meinem PowerShell-Script über $LASTEXITCODE auszuwerten:

$arguments = "/try_to_connect","00:23:05:a1:22:f1"  
& "D:\NextCloud\Test\BluetoothView.exe" $arguments  
$LASTEXITCODE

Leider ist $LASTEXITCODE immer leer, egal welchen Status mein Gerät hat.

Wenn ich anstelle von $LASTEXITCODE nur $? nutze, bekomme ich immer nur "TRUE" als Info, dass das Programm ausgeführt wurde.

Hat jemand eine Idee, wie ich den Return-Code von BluetoothView.exe in PowerShell abfragen und visualisieren kann? Im Netz habe ich leider keine Lösung gefunden und die gekauften PowerShell-Bücher sagen dazu auch nichts.

Content-ID: 536261

Url: https://administrator.de/contentid/536261

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

ITvortex
ITvortex 17.01.2020 aktualisiert um 10:52:55 Uhr
Goto Top
Hey,

wenn du ein echo $argmuents machen würdest, dann würdest du feststellen, dass dein Output folgender ist:

try_to_connect
00:23:05:a1:22:f1

das \n wird dein Tool wohl nicht interpretieren ;)

PS: Zur Ausgabe ist natürlich ein echo nicht notwendig, $arguments reicht. Wollte nur das du weißt was ich meine face-smile
142232
Lösung 142232 17.01.2020 aktualisiert um 11:09:04 Uhr
Goto Top
Hat jemand eine Idee, wie ich den Return-Code von BluetoothView.exe in PowerShell abfragen und visualisieren kann?
Powershell basiert auf dem .NET Framework, lerne es zu nutzen face-wink
$proc = start-process "D:\NextCloud\Test\BluetoothView.exe" -Argumentlist "/try_to_connect 00:23:05:a1:22:f1" -wait -passthru  
$proc.ExitCode
Gruenspecht
Gruenspecht 17.01.2020 aktualisiert um 11:25:29 Uhr
Goto Top
DANKE serial!! Ich sehe, ich muss noch SEHR VIEL lernen. Danke auch an Mitglied: ITvortex
142232
142232 17.01.2020 aktualisiert um 11:52:55 Uhr
Goto Top
Generell kann man sagen das $LASTEXITCODE nicht "zuverlässig" dafür genutzt werden alle Rückgabewerte einer Anwendung auszuwerten, da da es nur bei legacy commands wie z.B. die integrierten DOS-Commands gesetzt wird die explizit den exit <num> Befehl nutzen, da es aber unterschiedliche Methoden gibt einen Rückgabewert aus einer Anwendungheraus zu setzen sollte man der automatischen Variable $LASTEXITCODE niemals blind vertrauen, nur wenn man den Support mit seiner Anwendung vorher überprüft hat.
Ich arbeite jetzt schon über ein Jahrzehnt mit der PS und habe die Variable nie wirklich genutzt, also am besten schnell wieder vergessen, das ist ein Relikt vergangener Tage face-wink.

So denn, schönes Wochenende.
Gruenspecht
Gruenspecht 17.01.2020 um 12:11:35 Uhr
Goto Top
OK! DANKE nochmals und auch Euch ein schönes Wochenende aus dem Bergischen Land.