none
Variable hochzaehlen in For Schleife RRS feed

  • Frage

  • Hallo zusammen,

    ich bin Neueinsteiger bei PowerShell und ich entschuldige mich schon vorab für diese Anfängerfrage, aber ich habe jetzt Stunden im Netz verbracht und finde keine Lösung.

    Folgender Sachverhalt:

    PowerShell mit GUI

    Frage an Benutzer, Bsp: "Wie viele Firmen besitzen Sie?"

    Antwort des Benutzers als Beispiel 5.

    Ich möchte jetzt eine For Schleife bauen, die bis einschließlich 5 hochzählt, beginnend bei 1. Soweit alles klar.

    In jedem Durchlauf soll mir aber eine Variable $Firma erstellt werden, die ich nachher weiter verarbeiten kann.  Wie bekomme ich den Zähler $i an die Variable $Firma angeheftet?

    In mehreren Suchen habe ich immer Array als Antwort gelesen, soweit ich das verstehe muss aber für ein Array der Inhalt vorher bekannt sein, oder?

    Ich bekomme die Zahl ja erst vom Benutzer. Einfaches Beispiel:

    $x=$objTextBox.Text
    For ($i = 1;$i -le $x;$i++)
    { 
        $outlet="Outlet " + $i
        Write-Host $outlet
      }

    Wenn der User jetzt 10 als Anzahl der Filialen eingibt bekomme ich den Output

    Outlet 1

    Outlet 2

    Outlet 3

    ...

    Und genau das benötige ich jetzt aber als Variablen.

    Vielen Dank schon mal im Voraus fürs Lesen!

    Beste Grüße

    Thomas


    Montag, 11. Februar 2019 13:35

Antworten

  • Dynamische Variablennamen gibt es nicht, aber du kannst problemlos Arrays verwenden.

    https://www.windowspro.de/script/arrays-powershell-anlegen-aendern-auslesen-sortieren-loeschen

    Montag, 11. Februar 2019 13:40

Alle Antworten

  • Dynamische Variablennamen gibt es nicht, aber du kannst problemlos Arrays verwenden.

    https://www.windowspro.de/script/arrays-powershell-anlegen-aendern-auslesen-sortieren-loeschen

    Montag, 11. Februar 2019 13:40
  • Vielen Dank für die schnelle Antwort!

    Den Link kannte ich schon, da wird es leider nicht wirklich erklärt. Irgendwie bin ich dann aber bei einer weiteren Seite gelandet die mir die Augen geöffnet hat.

    $outlet = @()
        For ($i = 1;$i -le $x;$i++)
        { 
          $outlet += $i
        }

    += hat es bewirkt :)

    Danke nochmals!

    Montag, 11. Februar 2019 14:36
  • Thomas,

    netter Nick!  ...  vielleicht wirst Du den mal ändern müssen ... irgendwann ...  ;-)

    Nur um ganz korrekt zu sein ... prinzipiell ist es schon möglich programmatisch Variablen zu erzeugen, die mit einer Laufvariable hochgezählt werden ...

    for ($i=1; $i -le 5; $i++){
        New-Variable -Name "var$i" -Value $i
        Get-Variable -Name "var$i" -ValueOnly
    }

    ... aber, wie Du in der Antwort von bfuerchau schon lesen konntest, ist das in Powershell quasi nie nötig.

    Man könnte auch leere Arrays erstellen, wenn man unbedingt wollte, aber auch das ist eigentlich nicht nötig.

    Vielleicht nimmst Du Dir ein bissl Zeit und schaffst Dir erstmal die Grundlagen von Powershell drauf. Da gibt es zahlreiche gute Bücher oder  - im Moment noch verfügbar - den kostenlosen und sehr empfehlenswerten Video-Kurs in der Microsoft Virtual Academy - Getting Started with Powershell.  Das erspart Dir bestimmt eine Menge Frustration und verschwendete Zeit. Ich glaube, man kann eine hinreichend komplexe Technologie nicht vernünftig lernen indem man sich ein paar Zeilen Code zusammengoogled.

    Und wenn Du irgendwo stecken bleibst, bist Du hier immer herzlich willkommen und wir versuchen Dir weiterzuhelfen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Montag, 11. Februar 2019 14:39
  • ....  Seite gelandet die mir die Augen geöffnet hat.....

    Vermutlich machst Du Dir damit das Leben schwerer als nötig. Solche Konstrukte sind in Powershell üblicherweise völlig überflüssig und machen Deinen Code deutlich komplexer und verworrener als nötig.   ;-)

    Es gibt mit nahezu hundertprozentiger Sicherheit einen besseren Weg, um Dein Ziel zu erreichen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Montag, 11. Februar 2019 14:43
    Montag, 11. Februar 2019 14:42
  • Nachhaltiger wäre vielleicht sich mit der Programmierung zu beschaeftigen. Die Syntax mag sich von Programmiersprache zu Programmiersprache zu aendern. Grundlegende Konzepte bleiben hingegen bestehen. 

    Ein möglicher Einstieg waere z.B.:

    https://www.faq-o-matic.net/2015/08/17/powershell-einfhrung-kostenloses-e-book


    regards Thomas Paetzold visit my blog on: http://sus42.wordpress.com

    Montag, 11. Februar 2019 14:42
  • $firmen=@()

    $anzahlfirmen= read-host: "Anzahl der Firmen"

    for ($i=0;$i -le $anzahlfirmen; $i++) { $eingabe= read-host "Firma $i" $firmen[$i] = $eingabe }




    regards Thomas Paetzold visit my blog on: http://sus42.wordpress.com


    • Bearbeitet Peddy1st Montag, 11. Februar 2019 14:45
    Montag, 11. Februar 2019 14:44