fisistew
Goto Top

Powershell GUI: Powershell Console in GUI einbinden und als Ausgabefenster (richTextBox) nutzen?

Hallo liebe Community,

ich möchte gerne eine PS Console in meine GUI einbinden und als Ausgabefenster nutzen. (siehe Bilder)
Mein Tool funktioniert schon sehr gut, nur möchte ich es anders lösen.
Ist das möglich und wie kann ich das realisieren? Kann mir hier vllt jemand helfen?

Vielen Dank im voraus face-smile

Vorher:

vorher


Nachher:

nachher

Content-ID: 389931

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

Ausgedruckt am: 25.11.2024 um 02:11 Uhr

erikro
erikro 18.10.2018 um 10:46:47 Uhr
Goto Top
Moin,

Deine Frage klingt ungefähr so: Ich habe ein Auto. Mit dem fahre ich nach Hause. Jetzt will ich woanders hin. Kennt jemand den Weg? face-wink

Ein paar mehr Informationen, was Du wie lösen willst, wären echt nicht schlecht.

Liebe Grüße

Erik
FISIStew
FISIStew 18.10.2018 aktualisiert um 11:19:40 Uhr
Goto Top
Hallo erikro,

erst einmal Danke für Dein Interesse.

Auf Deine Frage "was Du wie lösen willst", diese wurde doch eigentlich schon beantwortet.

Ich möchte anstatt eines richTextBox eine PS Console in die GUI einbauen wie auf den Bildern schon gezeigt.
Also als Ausgabefenster und gleichzeitig als Konsole für Freitext nutzen.
Die PS Console wurde von mir nur als Bild darübergelegt.

Wie soll bzw. kann ich es denn besser beschreiben!? face-smile
Für mich wäre erst einmal wichtig ob ich das realisieren kann und wenn ja wie kann ich sowas umsetzen?
Derzeit kann ich manche Abfragen nur als externes Fenster anzeigen lassen.

Danke Dir im voraus für Deine Hilfe!

Viele Grüße

Stew
erikro
erikro 18.10.2018 um 11:33:43 Uhr
Goto Top
Naja, ein Wort zur Programmiersprache und was denn in der PS so ausgegeben werden soll, wären vielleicht nicht schlecht. face-wink
FISIStew
FISIStew 18.10.2018 aktualisiert um 14:24:49 Uhr
Goto Top
face-smile

Na ja, ich arbeite derzeit noch mit Forms und alles was ich mit cmdlets oder cmd Befehlen ansprechen kann.
(Ich weiß, Forms ist nicht mehr up to date, aber das ganze wird irgendwann in wpf umgebaut)

Hier mal ein Beispiel was ich dann über eine cmd console ausgebe:


function nslookup {

$server=$comboBox1.text;
$cmd = "cmd"
$param = "/k nslookup $server"
Start-Process $cmd $param -WorkingDirectory c:\

}

oder dann im Ausgabefenster direkt:


function Drive {

$server=$comboBox1.text;
$space = gwmi win32_logicaldisk -ComputerName $server | Format-Table DeviceId,
@{n="size";e={[math]::Round($_.Size/1GB,0)}},
@{n="Free";e={[math]::Round($_.FreeSpace/1GB,1)}} -wrap -AutoSize| fl | out-string;
$richTextBox1.text = $space

}


Deshalb hätte ich gerne ein Consolenfenster anstatt eine Ausgabebox in meiner GUI, die mir alles was ich abfrage dort ausgibt oder ich direkt dann in der Console innerhalb der GUI arbeiten kann!
rubberman
rubberman 18.10.2018 um 15:21:59 Uhr
Goto Top
So einfach ist es eben nicht. Wenn du nur Ausgabe haben willst, die aussieht wie die PS Console dann konfiguriere deine Textbox einfach so, dass es so aussieht als ob ...
Wenn du allerdings die Funktionalität einer PS Console haben willst, brauchst du natürlich auch Powershell als interpretierenden Prozess. Das heißt, du hängst nicht nur einfach ein Consolefenster ein, sondern einen kompletten fremden powershell.exe Prozess. Könnte ich dir in C und Windows API ggf. noch vorturnen, von Windows Forms hab ich aber überhaupt keine Ahnung.

Steffen
erikro
erikro 18.10.2018 um 15:28:28 Uhr
Goto Top
Bei Forms bin ich auch raus.
FISIStew
FISIStew 18.10.2018 um 17:53:44 Uhr
Goto Top
Danke Dir trotzdem erikro!!!

VG
Stew
FISIStew
FISIStew 18.10.2018 um 17:54:36 Uhr
Goto Top
Hey rubberman,

vielen Dank für Deinen Beitrag!
Kann ich dann C und API in mein Forms einbinden? Es wäre ja dann nur ein Codeschnipsel den ich in Forms einbinden müsste, oder?

Wie würde denn sowas aussehen, wenn ich einen kompletten fremden PS Prozess bauen müsste?
Mit C kenne ich mich leider überhaupt nicht aus

Vielen Dank im voraus!

VG
Stew
rubberman
Lösung rubberman 18.10.2018 aktualisiert um 21:51:07 Uhr
Goto Top
Zitat von @FISIStew:
Es wäre ja dann nur ein Codeschnipsel
Ich fürchte das unterschätzt du ein wenig. Dort hab ich mal vorgeturnt, wie das mit einem eingebetteten Windows Editor aussehen würde:
https://www.coding-board.de/threads/button-zum-verschieben-des-fensters- ...
Und ob/wie man das einbinden könnte weiß ich überhaupt nicht. Hab mich nicht ansatzweise mit Forms beschäftigt.

Aber mal ehrlich, irgendwie rennst du da in eine Richtung die ... ähm ... wie soll ich sagen ... etwas unkonventionell ist.
  • Nutze Scriptsprachen als Script und nicht in irgendeiner GUI. Das passt nicht. Und mit Console schon gleich gar nicht. Oder
  • baue das Verhalten der von dir verwendeten Kommandos programmatisch nach. Dann brauchst du den ganzen Quatsch nicht. Oder ...
  • führe das entsprechende Kommando in einem Prozess aus, deren Ausgabe du mit einer Pipe abfängst. Wieder keine Ahnung, wie das mit Forms funktionieren könnte.

Steffen
137443
137443 19.10.2018 aktualisiert um 18:17:44 Uhr
Goto Top
Das ließe sich schon machen indem man einem Console-Window als Parent die Form bzw. ein Control zum Parent des Console-Windows macht.

Aber mach dir doch einfach eine Textbox für die Befehlseingabe und eine für die Ausgabe dann machst du bei Drücken von Enter in der einen Textbox einen neuen unsichtbaren CMD Prozess (ShellExecute = False) dessert StdOut- und StdErr-Stream du ausliest und in die Ausgabetextbox ausgibst, das ist schnell gescriptet denn das kann das Process-Object ja schon von Haus aus.
Wenn man will kann man es auch mit etwas mehr Aufwand auch in nur einer Textbox machen.
Für interaktive Befehle wie Diskpart und Co. muss man dann natürlich mehr Aufwand betreiben.

Gruß l.
FISIStew
FISIStew 21.10.2018 um 11:58:29 Uhr
Goto Top
Hallo rubberman,

vielen Dank für die Verlinkung Deines Beitrages.
Ich fürchte, Du hattest mit Deiner Befürchtung recht, das ich das Ganze etwas unterschätzt habe :D
Vermutlich sollte ich es wirklich bleiben lassen!

Deine Beiträge sind aber wirklich sehr interessant!

Vielen Dank an alle, ich glaube ich werde dieses Projekt wohl einstampfen.

Viele Grüße

Stew