Benutzer mit den meisten Antworten
Serieller Port nach Verfügbarkeit testen, anschließend Text senden

Frage
-
Hallo,
ich habe nach etwas Googlen herausgefunden, dass ich mit Powershell Verfügbare COM Ports anzeigen kann z.B.
[System.IO.Ports.SerialPort]::getportnames()
Auf den COM Ports etwas senden und empfangen kann und auch Strukturanweisungen versteht (if, then etc.) Fast wie bei Arduino (den ich halbwegs Programmieren kann)
Da ich aber nun so gar keine Ahnung von Powershell habe frage ich hier mal.
Und zwar soll Powershell nach dem Hochfahren die COM Ports durchsuchen. Wenn der entsprechende COM Port nicht vorhanden ist soll es nichts machen und sich einfach wieder schließen. Ist aber ein bestimmter COM Port vorhanden z.B. COM3 dann soll es diesen Port öffnen, etwas Senden und dann wieder schließen
$port.open() $port.Write("Hello") $port.Close()';
Wie verpacke ich das Ganze in eine Batch Datei, die ich dann von Windows automatisch am Start ausführen lassen kann?
- Bearbeitet Fisch133 Samstag, 23. September 2017 17:07
Antworten
-
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. September 2017 11:07
-
Und wie kann ich dann im Programm abfragen, ob es den COM Port nun gibt oder nicht?
Indem Du WMI verwendest, um die Ports zu enumerieren:
$portconn = New-Object System.IO.Ports.SerialPort $ports = (Get-WMIObject Win32_SerialPort).DeviceID foreach ($port in $ports) { $portconn.PortName = $port $portconn.Open() if ($portconn.IsOpen) { $portconn.Write("Hello") $portconn.Close() } else { Write-Warning "Failed to open port $port" } }
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. September 2017 11:07
Alle Antworten
-
Da ich aber nun so gar keine Ahnung von Powershell habe frage ich hier mal.
Wir können Dir hier im Forum weder Powershell beibringen, noch wie Du mit Windows arbeitest. Dafür gibt es genügend andere Quellen im Internet oder in Büchern. Und wir können auch keine Scripte für Dich schreiben. Einen guten Einstieg in die Powershell liefert zum Beispiel Microsoft in der Virtual Academy mit dem Kurs "Getting Started with Microsoft PowerShell". Fertige Scripte findest Du in der Powershell Gallery oder in der Microsoft Technet Script Library
Um gewünschte Prozesse automatisch event-gesteuert zu starten, kannst Du die Aufgabenplanung von Windows benutzen.
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''- Bearbeitet BOfH-666 Sonntag, 24. September 2017 09:37
-
Wir können Dir hier im Forum weder Powershell beibringen, noch wie Du mit Windows arbeitest. Dafür gibt es genügend andere Quellen im Internet oder in Büchern. Und wir können auch keine Scripte für Dich schreiben.
Ich will auch Powershell gar nicht lernen. Es reicht mir wenn ich meinen Arduino Prorgammieren kann. Nur für diese eine spezielle Aufgabenstellung benötige ich eben Powershell. Ich habe nur in einem anderen Forum erfahren (Arduino Forum) dass sich meine Aufgabenstellung vermutlich mit Powershell lösen lässt, dort aber auch keiner Ahnung hat wie das Funktioniert. Ich soll mich doch in einem Powershell Forum darüber unterhalten.
Klar das mir hier keiner Arbeit umsonst macht, aber etwas Hilfestellung wäre schon nett. Dazu ist ein Forum doch da. Einfach zu sagen "Lern die Programmiersprache" bringt mich (erstmal) wenig weiter, da ich neben Studium nicht unbegrenzt Zeit habe alle möglichen Programmiersprachen zu lernen, welche ich jeweils nur für eine kleine Aufgabe benötige. Trotzdem danke
-
da ich neben Studium nicht unbegrenzt Zeit habe alle möglichen Programmiersprachen zu lernen, welche ich jeweils nur für eine kleine Aufgabe benötige.
Sorry, aber Du musst bedenken, dass die Leute, die Du hier um Hilfe bittest, diese nicht neben einem Studium, sondern neben dem Beruf und viele auch noch neben Familie und Ehrenamt zur Verfügung stellen. Wenn ich daran zurück denke, wieviel Zeit ich damals neben dem Studium hatte, um mich persönlich weiterzuentwickeln (und nichts anderes ist ein Erlernen einer neuen (Programmier)sprache), kann ich dem Argument nicht folgen.
Aber ansonsten: Pack die Befehle in eine Textdatei, gib ihr die Erweiterung .PS1 und lass sie durch die Aufgabenplanung mit der "powershell.exe" aufrufen.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
Naja wie auch immer. Wenn jemand dennoch Lust und Zeit hat mir konkret zu helfen wäre ich sehr froh. Ich will hier keinem die Zeit klauen. Hatte nur auf etwas Hilfe gehofft. Da wird man im Arduino Forum aber als Anfänger freundlicher begrüßt (Damals als ich in Arduino noch neu war) als hier und wurde mit Codebeispielen etc. unterstützt.
Aber ansonsten: Pack die Befehle in eine Textdatei, gib ihr die Erweiterung .PS1 und lass sie durch die Aufgabenplanung mit der "powershell.exe" aufrufen.
Danke dafür. Jetzt müsste ich nur noch wissen um welche Befehle es konkret geht. Ich muss also erstmal die Com Ports rausfinden. Das mache ich mit
[System.IO.Ports.SerialPort]::getportnames()
Und wie kann ich dann im Programm abfragen, ob es den COM Port nun gibt oder nicht?
- Bearbeitet Fisch133 Montag, 25. September 2017 14:04
-
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. September 2017 11:07
-
Und wie kann ich dann im Programm abfragen, ob es den COM Port nun gibt oder nicht?
Indem Du WMI verwendest, um die Ports zu enumerieren:
$portconn = New-Object System.IO.Ports.SerialPort $ports = (Get-WMIObject Win32_SerialPort).DeviceID foreach ($port in $ports) { $portconn.PortName = $port $portconn.Open() if ($portconn.IsOpen) { $portconn.Write("Hello") $portconn.Close() } else { Write-Warning "Failed to open port $port" } }
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. September 2017 11:07