none
Suche Idee/Umsetzung für Dauerschleife RRS feed

  • Frage

  • Guten Morgen,

    ich habe hier ein kleines Script mit mehreren Menüs. Hinter den verschiedenen Menüpunkten stecken diverse Aufgabe wie NTFS-Berechtigungen anpassen, Nutzer anlegen, löschen, editieren etc.. Nach der Auswahl wird die jeweilige Aufgabe im Hintergrund ausgeführt und das Ergebnis (meist "Aufgabe xy wurde ausgeführt") via Write-Host ausgegeben. Soll danach eine weitere Aufgabe ausgeführt werden, muss das Script erneut aufgerufen werden.

    Ich möchte das Script so umbauen, dass nach der Ausgabe ein "Press any key to continue" kommt und danach der Sprung zurück ins Menü.

    Google liefert einige Ideen wie man das "Press any key to continue" umsetzen kann. Das sollte kein Problem darstellen. Aber wie erreiche ich am besten den Sprung zurück ins Script? Ich hatte am Anfang an ein "GOTO ANFANG" oder so gedacht, aber das wird von PowerShell wohl nicht unterstützt. 

    Ich könnte auch einfach das Script erneut aufrufen lassen, aber es gibt bestimmt schönere und elegantere Wege mein Ziel zu erreichen. Oder?

    Montag, 15. Oktober 2012 09:00

Antworten

  • Das komplette neustarten des Skriptes garantiert dir aber, dass das Skript immer mit den gleichen Bedingungen startet.
    Wenn du ein Goto oder eine Schleife benutzt (beides geht), dann musst du im speicher alle Variablen wieder auf startwerte setzen. Damit nicht eine Variable ausversehen einen Wert vom vorherigen durchlauf behält!
    Das ist sehr fehleranfällig!

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Bearbeitet Peter Kriegel Montag, 15. Oktober 2012 10:04
    • Als Antwort markiert notadmin Montag, 15. Oktober 2012 10:06
    Montag, 15. Oktober 2012 09:34
  • >>>>>> ich habe hier ein kleines Script mit mehreren Menüs
    Wie realisierst du die Menüs? nutzt du Das Konsolenfenster oder Windows Forms oder WPF ?

    Wenn ich das richtig verstehe möchtest du das Skript nach einer aufgabe einfaxh neu starten!?
    Dann kann sich das Skript mit dem dotsourcing ganz einfach selbst aufrufen !

    . meintollesSkript.ps1

    oder so:

    # das Skript startet sich selbst neu
    Start-Process powershell.exe -ArgumentList $MyInvocation.MyCommand.Definition
    # beenden von diesen SKript
    EXIT



    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Als Antwort markiert notadmin Montag, 15. Oktober 2012 09:22
    Montag, 15. Oktober 2012 09:16

Alle Antworten

  • >>>>>> ich habe hier ein kleines Script mit mehreren Menüs
    Wie realisierst du die Menüs? nutzt du Das Konsolenfenster oder Windows Forms oder WPF ?

    Wenn ich das richtig verstehe möchtest du das Skript nach einer aufgabe einfaxh neu starten!?
    Dann kann sich das Skript mit dem dotsourcing ganz einfach selbst aufrufen !

    . meintollesSkript.ps1

    oder so:

    # das Skript startet sich selbst neu
    Start-Process powershell.exe -ArgumentList $MyInvocation.MyCommand.Definition
    # beenden von diesen SKript
    EXIT



    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Als Antwort markiert notadmin Montag, 15. Oktober 2012 09:22
    Montag, 15. Oktober 2012 09:16
  • Mir kam als erstes ForEach in den Sinn, aber da du plötzlich mit "zum Menü springen" kamst, passt das wohl doch nicht. Ich weiss nicht genau wie du das mit dem Menü genau gedacht hast, bzw. wie dein Menü aussieht.

    Das mit dem GOTO wäre natürlich einfach gemacht, aber ich hab das auch noch nie gesehen, dass das irgendwie funktionieren würde.


    The following is my signature:

    Powershell Programmer & Advanced Lua Programmer

    Location: Switzerland

    Beside that, whenever you see a reply, you think is helpful, click "Alternate TextVote As Helpful"! And whenever you see a reply being an answer to the mainquestion of the thread, click "Alternate TextMark As Answer" (if you opened the thread).

    Montag, 15. Oktober 2012 09:18
  • Die Menüs sind wie folgt aufgebaut

    cls
    Write-Host "`nMENÜ`n"
    Write-Host "(1) Aktion a"
    Write-Host "(2) Aktion b"
    $varMenu = Read-Host "Deine Wahl"
    switch ($varMenu)
     {
     1
      {
      Write-Host "Aktion a"
      }
     2
      {
      Write-Host "Aktion b"
      }
     }

    An den erneuten Aufruf via .\script.ps1 habe ich auch schon gedacht, allerdings kommt mir das eher wie eine Laien-Lösung vor. ;-) Aber gut, lässt sich natürlich mit leben und vereinfacht das alles sehr.

    Montag, 15. Oktober 2012 09:21
  • Schau mal hier, da sind ein paar gute Ideen mit dabei, unter anderem dein Goto :)

    http://social.technet.microsoft.com/Forums/fi/ITCG/thread/3fc8b710-b220-4dcc-a6fe-8b5d6b960abd


    The following is my signature:

    Powershell Programmer & Advanced Lua Programmer

    Location: Switzerland

    Beside that, whenever you see a reply, you think is helpful, click "Alternate TextVote As Helpful"! And whenever you see a reply being an answer to the mainquestion of the thread, click "Alternate TextMark As Answer" (if you opened the thread).



    Montag, 15. Oktober 2012 09:23
  • Das komplette neustarten des Skriptes garantiert dir aber, dass das Skript immer mit den gleichen Bedingungen startet.
    Wenn du ein Goto oder eine Schleife benutzt (beides geht), dann musst du im speicher alle Variablen wieder auf startwerte setzen. Damit nicht eine Variable ausversehen einen Wert vom vorherigen durchlauf behält!
    Das ist sehr fehleranfällig!

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Bearbeitet Peter Kriegel Montag, 15. Oktober 2012 10:04
    • Als Antwort markiert notadmin Montag, 15. Oktober 2012 10:06
    Montag, 15. Oktober 2012 09:34
  • Ok, klingt schlüssig. Habe es deswegen jetzt mit dotsourcing realisiert.

    Hat sich wie immer gelohnt, hier meine Frage zu stellen! Vielen Dank!

    Montag, 15. Oktober 2012 10:07
  • Stimmt Peter, so was wäre mir nie in den Sinn gekommen.

    The following is my signature:

    Powershell Programmer & Advanced Lua Programmer

    Location: Switzerland

    Beside that, whenever you see a reply, you think is helpful, click "Alternate TextVote As Helpful"! And whenever you see a reply being an answer to the mainquestion of the thread, click "Alternate TextMark As Answer" (if you opened the thread).

    Montag, 15. Oktober 2012 10:44
  • Danke Jungs ! Ich werde gleich rot hier...
    Sind halt blutig gelernte Erfahrungswerte ;-)

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    Montag, 15. Oktober 2012 11:19
  • "Danke Jung !" Huh? Meintest du vielleicht Junge? ;)

    Egal.

    Ich kann mir vorstellen, dass du noch so einige Hacken kennst, die noch so manche nicht kennen, ich sehe auch immer wieder deine Antworten als "Antwort" (auf Deutsch ist das irgendwie voll komisch zum schreiben :/ ).

    So nebenbei, das mit dem String ist eine gute Idee.

    Ich möchte hier nicht immer extra das letzte Wort rauslassen oder so, aber ich denke, sowas darf man doch sagen oder?


    The following is my signature:

    Powershell Programmer & Advanced Lua Programmer

    Location: Switzerland

    Beside that, whenever you see a reply, you think is helpful, click "Alternate TextVote As Helpful"! And whenever you see a reply being an answer to the mainquestion of the thread, click "Alternate TextMark As Answer" (if you opened the thread).

    Please contact me, before reporting me, thank you.


    • Bearbeitet Livio von Büren Montag, 15. Oktober 2012 11:25 zusätzliche Information
    Montag, 15. Oktober 2012 11:24