PS Menu und Weiterverarbeitung

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

28.02.2021 um 10:17 Uhr, 668 Aufrufe, 24 Kommentare

Hallo zusammen,

ich würde gerne meine Batch-Struktur auf PS umstricken. Trotz intensiver Suche ist es mir nicht gelungen, einen Ansatz zu finden, wie ich innerhalb eines Scriptes ein kleines "Programm" realisieren kann (so hatte ich es in Batch).

Die Idee ist, ein Menu zu haben und damit weitere Programmblöcke aufrufen zu können.
Hier mein Einstieg.
Das Menu startet - soweit, so gut. Unabhängig davon wäre es schön, wenn es in einer "Form" (Fenster) angezeigt würde.

Eingabe 1: Dann sollte ein weiteres Fenster starten, und den Process onedrive anzeigen. Leider geht das Fenster gleich wieder zu.
Eingabe 2: Dann sollte ein weiteres Fenster starten, und eine Liste zur Auswahl bereit stellen.
usw.


Mir ist irgendwie gar nicht klar, wie ich weitermache. Vielleicht denke ich auch viel zu kompliziert, vielleicht geht es auch nicht ...
In Batch ist es ja mit goto möglich einzelne Programmblöcke aufzurufen, abzuarbeiten und dann beispielweise zum Menu zurückzukehren.

Leider habe ich auch kein Tut oder Beispiel gefunden, an dem ich mich langhangeln kann!

Hier mein bisheriger Stand:


Mitglied: chkdsk
LÖSUNG 01.03.2021 um 10:05 Uhr
Du möchtest also eine GUI mit Buttons haben, welche nach betätigen ein neues Skript starten?
Bitte warten ..
Mitglied: OKIDOKI
01.03.2021, aktualisiert um 11:24 Uhr
So isses 😊
Für meine Weiterarbeit wäre es wichtig:
- eine GUI mit Buttons für weitere Scripte
- die Scripte sind sowohl Batch + vbs + PS (wie beispielsweise txt-Bearbeitung Nr. 2 oben)
- während der Abarbeitung einen Ladebalken zu haben (muss keinesfalls ein Fortschrittsbalken sein, da das Script aber andere benutzen sollen, müssen sie wissen, dass es noch "lebt")
- nach der Scriptabarbeitung wieder zu Start-GUI kommen zu können

PS: Was mir halt völlig unklar ist, wie eine solche Struktur aussehen könnte. In Batch ist mir die Stapelverarbeitung klar, ich kann super in meinem Script hin- und herspringen. Ich kann mir Hilfsdateien (vbs) bauen, aufrufen und abarbeiten lassen - dann wieder zurück zum Start - und währenddessen noch einen ganz einfachen Busy Indicator laufen lassen. Und das alles in einem Script ... So eine einfache "Programmstruktur" habe ich nach bereits sehr langer Suche in PS nicht gefunden, sondern immer nur "einfache" Aufgaben pro Script.
Bitte warten ..
Mitglied: chkdsk
LÖSUNG 01.03.2021 um 11:51 Uhr
Schau dir mal folgendes an...Diese GUI kannst du beliebig erweitern. Musst halt nur die Forms Größe ändern -> Zeile 14 & 15.
In Zeile 30 & 46 gibst du den Pfad zu deinen bereits vorhanden Skripten an. Ladebalken musst du, sofern von der jeweiligen Sprache unterstützt, direkt in deine Skripte einbauen.

Bitte warten ..
Mitglied: OKIDOKI
01.03.2021, aktualisiert um 13:02 Uhr
Hey chckdsk, das ist schon mal total klasse!!!
Habe mich schon in einige Tuts eingearbeitet, auch bei MS, aber das Gefühl gehabt, dass ich mich so meinem Anliegen nicht nähern kann!
Bei der Gestaltung deines Scriptes finde ich mich aber (dank der Vorarbeit 😊) gut zurecht.
So würde ich jetzt einfach mal ins Eingemachte gehen und für meine Bedürfnisse anpassen.

Ich hoffe, dass dies auch ein Grundgerüst für andere user sein könnte (bin zumindest einigen Suchenden auf der Reise begegnet). vielleicht entsteht hieraus ein kleines Tut, das an mancher Stelle vielfältig erweiterbar werden könnte!

HERZLICHEN DANK, genau das, was ich gesucht habe (bei allen bisherigen Einarbeitungen wäre ich nie zu einem solchen, übersichtlichen Ergebnis gekommen, das sich vermutlich vielfältig erweitern lässt!)

Eine Frage habe ich noch: Wie ist gewährleistet, dass nach Abarbeitung eines Scriptes wieder ins Hauptmenu gesprungen wird? Durch Aufruf in der jeweiligen Batch am Ende? Und, wenn ein PS-Script abgearbeitet wird, wie dann?
Eine zweite:
Beim Aufruf in der PS-Console startet es wunderbar. Rufe ich es allerdings bei Visual Studio Code auf, folgt folgende Fehlermeldung beim Start:

In welcher Code-Umgebung arbeitest du?

okidoki
Bitte warten ..
Mitglied: chkdsk
01.03.2021 um 14:03 Uhr
Zitat von @OKIDOKI:

Eine Frage habe ich noch: Wie ist gewährleistet, dass nach Abarbeitung eines Scriptes wieder ins Hauptmenu gesprungen wird? Durch Aufruf in der jeweiligen Batch am Ende? Und, wenn ein PS-Script abgearbeitet wird, wie dann?

Wenn du dir das Skript als .ps1 abspeicherst, bleibt sie immer geöffnet, auch nach Auswahl eines Skripts. Man muss die GUI via "Beenden" schließen.

In welcher Code-Umgebung arbeitest du?
Das ist die Powershell und eigentlich auch gar nicht für GUI geeignet weil sie mit Standard Forms arbeitet
Bitte warten ..
Mitglied: OKIDOKI
01.03.2021 um 14:19 Uhr
Ich danke dir noch einmal vielmals! Dank Administrator gehen Träume in Erfüllung!!!
Bitte warten ..
Mitglied: OKIDOKI
01.03.2021 um 14:48 Uhr
Jetzt muss ich leider noch einmal stören: Wie öffne ich das Script?
Also, unter der Console geht es, unter Visual Studio Code kommt o.g. Fehlermeldung.
Unter folgendem Aufruf startet es aus einer Batch nicht (andere Scripts kein Problem):
sondern bringt ebenfalls o.g. Fehlermeldung!

Hast du eine Idee, wie ich das Script zum Laufen bringe?
(Console bringt nichts, weil es von anderen auf anderen Rechnern laufen soll)
Bitte warten ..
Mitglied: chkdsk
01.03.2021 um 15:07 Uhr
Wie es sich mit Visual Code verhält kann ich dir nicht sagen...damit habe ich mich bis jetzt noch nicht beschäftigt.

Einfach die Codezeilen von oben copy&paste in eine Text Datei...Notepad++ oder Editor o.ä.
Die Endung der Textdatei .txt dann abändern in .ps1 und Feuer frei. Sofern Powershell bei dir aktiviert ist.
Bitte warten ..
Mitglied: OKIDOKI
01.03.2021 um 17:00 Uhr
Leider, leider, ich bekomme es nicht mehr hin, es läuft nicht 😢😢😢.

Hast du noch einen Tipp, ich war so glücklich vorhin, würde deinen Code so gerne ausbauen!!!

Es bleibt bei o.g. Fehlermeldung, andere Scripte starten durch denselben Aufruf problemlos ...
PS: Es geht auch nicht durch Doppelklick trotz geänderter Richtlinie!

Bitte warten ..
Mitglied: chkdsk
01.03.2021 um 17:31 Uhr
Poste mal bitte deinen kompletten Code sowie die dazugehörige Fehlermeldung. Laut obiger Fehlermeldung fehlen Klammern
Bitte warten ..
Mitglied: OKIDOKI
01.03.2021, aktualisiert um 19:44 Uhr
ok, nach den ganzen Änderungen mit PS habe ich den Rechner noch einmal neu gestartet, deinen Code noch einmal neu eingelesen, gespeichert und nun geht es (plötzlich) auch mithilfe der Batch, dein Script zu starten!!! (verrückt!)
YEAH, Fernheilung :-) face-smile

So, werde jetzt den heiligen Gral weiter ausbauen und meine Erkenntnisse hier teilen - damit auch anderen geholfen werden kann!
Falls jemand selbst ein Anliegen hat, können wir das gerne in dieses kleine Projekt mit übernehmen :-) face-smile

Puh, alles gut!
Danke dir chckdsk noch einmal für deine Hilfe!
Bitte warten ..
Mitglied: OKIDOKI
02.03.2021, aktualisiert um 20:42 Uhr
Hallo chckdsk,
mal eine kleine Rückmeldung aus dem Labor:
Ich habe ja bisher ein funktionierendes Script in Batch. Nun habe ich gedacht, dass es erst einmal am sinnvollsten wäre, wenn ich nicht einzelne Scriptteile in einzelnen Scripten schreibe, sondern bei Button 1 das Script xyz.bat an der Sprungmarke :button1 öffnen lasse.
Nur, wie gebe ich das ein zusammen mit der Pfadangabe, da PS ja keine relativen Pfade mag ...
Hier müsste es ja hin:

Bitte warten ..
Mitglied: chkdsk
03.03.2021 um 07:28 Uhr
Ich weiß jetzt ehrlich gesagt nicht was du meinst.
Wenn du bspw. eine Batch auf einem Netzlaufwerk hast, sieht das wie folgt aus

Wenn du bspw. eine Batch auf deinem lokalen PC hast, sieht das wie folgt aus

Bitte warten ..
Mitglied: OKIDOKI
03.03.2021 um 07:44 Uhr
... das ist mir soweit klar :-) face-smile
Leider findet das Script aber die Batch mit einem Parameter (zum Einstieg in die Batch an einer bestimmten Sprungmarke), nicht, wenn es im selben Verzeichnis liegt, aber die Pfadangabe (weil relativ) nicht angegeben ist.

Vom Konstrukt müsste es so sein, damit er die Datei findet:

start-process "batch2.bat" "Sprungmarke"

oder eben
start-process relativer-Pfad"batch2.bat" "Sprungmarke"
oder
start-process Get-Location"batch2.bat" "Sprungmarke"

also, wenn PS die Datei nicht findet, dass irgendwie der Pfad vorher ermittelt wird mit Get-Location - nur, wie einbauen? :-) face-smile
Bitte warten ..
Mitglied: 147669
147669 (Level 1)
03.03.2021, aktualisiert um 11:06 Uhr
oder alternativ auch
$psscriptroot enthält immer den Ordner in dem das gerade ausgeführte Script liegt.

Will man dagegen relativ zum Arbeitsverzeichnis einen Pfad angeben macht man dies mit .\datei.cmd, aber das Arbeitsverzeichnis ist oftmals nicht gleich dem Scripverzeichnis deswegen ist es besser man nimmt gleich die spezielle Variable $psscriptroot wenn man Pfade relativ zum Powershell Script ansprechen will.
Bitte warten ..
Mitglied: OKIDOKI
03.03.2021 um 08:15 Uhr
Hey, das ist schon mal total klasse!

Soweit geht es, allerdings funktioniert die Parameterübergabe (also die Sprungmarke, bei der er beim Batch einsteigen soll) noch nicht:
Dann kommt die Meldung:

Unabhängig davon:
Wenn das nackte Script (Original) startet folgt im Fenster gleich die Anzeige:

Bitte warten ..
Mitglied: 147669
147669 (Level 1)
03.03.2021, aktualisiert um 09:44 Uhr
Du hast das Escaping der Anführungszeichen mit Backtick vergessen weil dieser ja schon innerhalb von Anführungszeichen stehen ,schau dir mein Beispiel noch mal ganz genau an, dann siehst du es selbst!!
Bitte warten ..
Mitglied: OKIDOKI
03.03.2021, aktualisiert um 10:01 Uhr
hmm, ich habe deinen Code hineinkopiert, damit wirklich alles drin ist ...
Es passiert gar nichts 😒: (also keine Meldung)

Außer False, ds steht wie gehabt (hat aber mit o.g. vermutlich nix zu tun) 😂
Bitte warten ..
Mitglied: 147669
147669 (Level 1)
03.03.2021, aktualisiert um 10:11 Uhr
Start-Process startet die Bat in einem neuen cmd Prozess in der PS Konsole siehst du also von den Batchausgabe nichts das ist vollkommen normales Verhalten!
Du solltest dir ab und zu mal die Doku zu den CMDLets durchlesen...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Das False kommt von einem der letzten Befehle nach dem Schließen des Fensters, nicht von der Batch die wird ja in einem separaten Prozess ausgeführt. Siehe Doku dann bestehst du's!
Bitte warten ..
Mitglied: OKIDOKI
03.03.2021, aktualisiert um 10:18 Uhr
das habe ich gemacht, du hast auch vollkommen recht!

Das Problem ist aber, dass er die Sprungmarke innerhalb der Batch nicht findet!
Wenn ich die weglasse, geht es ja:
nur die Sprungmarke findet er nicht ... dazu steht auch keine Lösung in dem Link (soweit ich das sehe)
Bitte warten ..
Mitglied: 147669
147669 (Level 1)
03.03.2021, aktualisiert um 11:28 Uhr
Dann ist deine Batch fehlerhaft programmiert.

Wenn du das Escapen nicht nutzen willst kannst du die Parameter auch als Array übergeben
Funktioniert hier einwandfrei. Wenn bei dir nicht, machst du was falsch.

Die Variante die ich hier nutze (mit den Parametern als Array), habe ich oben noch ergänzt, da brauchst du dann auch nicht escapen.
screenshot - Klicke auf das Bild, um es zu vergrößern

Wozu du aber hier Batches aus Powershell aufrufst statt es direkt in der PS abzufackeln erschließt sich mir ehrlich gesagt nicht, das soll hier ja das Ziel sein so wie ich gelesen habe ...
Bitte warten ..
Mitglied: OKIDOKI
03.03.2021 um 12:37 Uhr
Tataa, tataa, super!!!

Also, tacko.
Es liegt natürlich an der Batch. Funktionieren tut es nicht, aus PS einfach eine Batch aufzurufen und gleich zu einer Sprungmarke zu springen.
Dafür benötigt der Einstieg noch einen Hinweis. Dann funktioniert es auch mit allen hier vorgestellten Beispielen!

VIELEN DANK SchmitzKatz und chckdsk!!!
Danke SchmitzKatz für deine Batch!!!

Und natürlich hast du recht, meinen gesamten Code in PS umzumodeln. Da aber noch einige Teile vbs und batch schaffe ich das nicht gleich in einem Zug - dafür reichen meine Kenntnisse nicht. Außerdem muss es währenddessen produktiv quasi weiter genutzt werden 😊.
Mit anderen Worten: Step by step. So habe ich aber schon einmal die Startseite (den heiligen Gral 😎) und kann mich am Hauptgerüst (die Batch) entlanghangeln - und die noch vor mir liegenden Blöcke Stück für Stück in PS umsetzen!

Einzige Frage wäre noch, warum der "Gral" beim Start "False" auswürft. Habe ihr dazu noch eine Idee?
Bitte warten ..
Mitglied: 147669
147669 (Level 1)
03.03.2021, aktualisiert um 15:43 Uhr
Zitat von @OKIDOKI:
Einzige Frage wäre noch, warum der "Gral" beim Start "False" auswürft. Habe ihr dazu noch eine Idee?
Das ist wohl Zeile 6 wo das PS Console mit der Win32 Funktion Fenster ausgeblendet wird. Jeden Funktionsaufruf deren Ausgabe du nicht nach out-null umleitest wird auch auf der Konsole angezeigt ...
Wir haben deinen kompletten Code aber nicht. Daher die Vermutung das du bspw. ein Control erstellst oder eine Funktion aufrufst und das das Ergebnis der Funktion ist.
Bitte warten ..
Mitglied: OKIDOKI
03.03.2021, aktualisiert um 19:22 Uhr
Der komplette Code ist bisher noch der heilige Gral :-) face-smile also s.o.
Den wollte ich erst einmal soweit optimieren, dass es keine Fehlermeldungen gibt - bevor ich weiter daran herumstricke. Sonst komme ich den Fehlern irgendwann nicht auf die Spur ... so meine Vermutung!

ok, habe Zeile 6 nach dem Tipp von SchmitzKatz geändert, voila, Meldung weg!!!


Bitte warten ..
Heiß diskutierte Inhalte
Sicherheit
Verpackter Laptop entwendet
r0x3llVor 1 TagFrageSicherheit11 Kommentare

Hallo. Mir wurde aus dem Büro ein noch verpackter Dell XPS Laptop mit einem Wert von ca 3.500€ gestohlen. Kann man da was orten? ...

Off Topic
Wie sieht eine korrekte IT-Organisation aus?
imebroVor 16 StundenFrageOff Topic17 Kommentare

Hallo, da unser IT-Verantwortlicher ja vor einem Jahr gehen musste, stelle ich mir die Frage, wie denn eine korrekte IT-Organisation überhaupt aussehen muss. Zur ...

LAN, WAN, Wireless
2x Fritzbox 7590 mit separatem DSL über WAN verbinden
gelöst FailixVor 1 TagFrageLAN, WAN, Wireless19 Kommentare

Liebes Administrator Forum, Ich bin schon länger passiver Lese und habe mich jetzt entschlossen mit einer Frage den ersten Post hier zu schreiben. Über ...

LAN, WAN, Wireless
Cat 7 Patchkabel mit nur 11MBits im Download
gelöst RickHHVor 1 TagFrageLAN, WAN, Wireless7 Kommentare

Moin zusammen, ich habe mir soeben ein paar Patchkabel (aus einem Cat 7 Kabel) fertig gemacht. Die Belegung ist: 1 weiß/grün 2 grün 3 weiß/orange 4 blau 5 weiß/blau ...

DNS
Network Scanner zeigt falschen Hostname an
gelöst vafk18Vor 1 TagFrageDNS10 Kommentare

Ich habe in meinem Netzwerk 3 Fritzboxen im Betrieb. Die Fritzboxen haben in den Einstellungen als Namen "fb7270", "fb7369" und "fb7412". Jede Fritzbox hat ...

Windows 10
Windows 10 keine Eingabegeräte mehr erkannt - Anmelden nicht möglich
akira2012Vor 1 TagFrageWindows 108 Kommentare

Hallo Zusammen! Ich habe hier einen Windows 10 Rechner. Er bootet ganz normal aber nach dem hochfahren, werden die Eingabegeräte nicht mehr erkannt. Weder ...

Notebook & Zubehör
Funktionieren keine USB-DVD-RW an Surfaces?
StefanKittelVor 18 StundenFrageNotebook & Zubehör14 Kommentare

Hallo, ein Kunde von mir hat ein Surface Pro. Wenn er ein USB-DVD-RW-Laufwerk an die Dockingstation anschliesst funktioniert es nicht. - Es bekommt Strom ...

LAN, WAN, Wireless
Router der mehrere VLANs per WLAN empfangen kann?
gelöst Rainer117Vor 1 TagFrageLAN, WAN, Wireless4 Kommentare

Hallo zusammen, ich bin auf der Suche nach einem Router, der mehrere SSIDs (ursprünglich getrennte VLANs) über WLAN empfangen kann und dann per LAN ...