[Powershell]Problem bei Schleife in einer Funktion

UberJaeger

Lt. Junior Grade
🎅Rätsel-Elite ’24
Registriert
Sep. 2005
Beiträge
467
Hallo,

ich habe ein Problem und finde einfach die Ursache dafür nicht. Ich habe eine relativ simple Schleife, die einwandfrei funktioniert, jedoch möchte ich die Schleife in einer Funktion haben, damit ich sie einfach später im Programm benutzen kann wann ich möchte. Ich habe keinerlei Veränderungen an der Schleife vorgenommen, sondern sie einfach nur in eine Funktion deklariert, aber es funktioniert einfach nicht mehr sobald ich das mache, ich habe:


Code:
for ($i = 0; $i -lt $valhddTemp.Count; $i++) 
{

        $top=$top+20
        $a = $labelHDD[$i]
        
      

        $a = New-Object "System.Windows.Forms.Label"
        $a.Top = $top
        $a.Left = 137
        $a.TextAlign = "MiddleLeft"
        $a.Height = 20
        $a.Width = 55
         
        $labelarray1 += $a
                    
        $form.Controls.Add($labelarray1[$i])
  }

So funktioniert es, wenn ich dann aber die Schleife in eine Funktion schreibe:

Code:
function createlabel
{
schleife
}

dann geht es auf einmal nicht mehr. Und zwar habe ich versucht mir durch Write-Host immer zwischenwerte zu liefern und der erste Durchlauf der Schleife läuft noch durch, aber beim 2ten Durchgang gibt es dann immer bei der Zeile
Code:
 $labelarray1 += $a
folgende Fehlermeldung:

"Fehler beim Aufrufen der Methode, da [System.Windows.Forms.Label] keine Methode mit dem Namen "op_Addition" enthält.
In C:\Powershell\test.ps1:55 Zeichen:9
+ $labelarray1 += $a
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound"


Diese Variable ist ein array und ich habe das auch an verschiedenen Stellen im Script so deklariert: $script:labelarray1 = @()
Es ist aber egal wo ich das mache, es funktioniert trotzdem nicht. Es muss aber irgendwas mit dem Array zu tun haben, da es ja anscheinend erst beim hinzufügen eines weiteren Objekts Probleme macht.
Ich verstehe halt nicht warum es ohne Funktion einwandfrei geht und in der Funktion dann nicht mehr, ohne das irgendwo sonst was geändert wurde.
 
Zuletzt bearbeitet:
Der kann in deiner Funktion nicht auf das $labelarray1 zugreifen und erstellt es daher neu statt das Array zu nutzen :)
Und beim neu erstellen nutzt er dummerweise eben einen String, kein Array. Daher läuft der erste durch, ab dem 2ten nicht mehr.

Solltest mal das $labelarray1 global machen, das es in der Funktion auch zur Verfügung steht ;)
 
Ich dachte mit $script:labelarray1 habe ich es global gemacht ?
 
Kann ich nicht sicher sagen. Ich bin kein Powershell Profi. Ich hab das aus der Fehlermeldung und meiner Erfahrung mit solchen Fehlern abgeleitet. Da ich selber aber eig. kein Powershell programmiere, kann ich nicht sagen wie der Syntax ist. Sorry.

​Bin mir aber sehr sehr sicher das dass der Fehler ist.

Normal kann man globale Variablen immer mit "global" davor setzen btw :)

also zB $global:labelarray1 = @();

Definition der globalen Variable sollte natürlich an den Anfang des Scripts.

(Laut Google :D)

Laut Google bedeutet das "script:" das es global für das aktuelle script ist. Sollte also auch gehen..
Würde es trotzdem mal mit dem Global versuchen.. Der Fehler sagt so oder so aus das er versucht das Objekt als String zu behandeln was natürlich nicht geht. Der Fehler ist also definitiv das er kein Array nimmt und somit beim 2ten Durchlauf nicht weitermachen kann.

Ansonsten stell mal die Zeile um, statt

$labelarray1 += $a
schreib mal
$labelarray1[] = $a

Könnte Funktionieren :)
 
Zuletzt bearbeitet:
ich habe jetzt einfach script durch global ersetzt und es geht... laut meinem Verständnis waren mit "script" deklarierte Variablen für das komplette script verfügbar, in einer anderen Schleife funktioniert es ja auch genau so. Also das verstehe ich jetzt trotzdem irgendwie nicht, aber ok dann benutze ich eben nur noch global. Danke für deine Hilfe.
 
Ja manchmal ist das bisschen komisch. Keine Ursache :) Freut mich das ich helfen konnte auch ohne das ich Powershell Profi bin ^^
 

Ähnliche Themen

Zurück
Oben