schem0t4pe
Goto Top

Erstellen von Checkboxen in Powershell mittels Schleife

Hallo zusammen,

ich möchte über Powershell Checkboxen in einer Form erstellen, dies mache ich mittels foreach Schleife, die Attribute hierfür werden über eine CSV importiert. Beim Click auf die Checkbox wird ein zuvor angegebener Domain User in eine Domain Sicherheits-Gruppe hinzugefügt.

Das Erstellen der Form und der Checkboxen funktioniert auch einwandfrei, außer die Variablen vom Click Ereignis werden falsch gesetzt bwz. egal welche Checkbox angeklickt wird, es wird immer die Anweisung mit den Variabeln der letzten Zeile aus der CSV ausgeführt.

Was mache ich falsch?

Hier ein Ausschnitt vom Code:

$shares = Import-Csv C:\temp\test.csv -Delimiter ';'

$height = 2

$height2 = 2

foreach ($share in $shares) {

$width = 25

$height += 25

$cb = New-Object System.Windows.Forms.Checkbox

$cb.name = $share.name

$cb.AutoSize = $true

$cb.Location = new-object System.Drawing.Size($width,$height)

$cb.ForeColor = 'white'

$cb.Text = $share.name

$cb.add_click({Add-ADGroupMember -Identity $share.group -Server $srv1 -Members $aduser -WhatIf})

$form.Controls.Add($cb)

}

Wenn ich die Checkboxen manuell pro Gruppe erstelle, funktioniert es.

Bin für jede Antwort dankbar, viele Grüße

Content-ID: 3335869463

Url: https://administrator.de/forum/erstellen-von-checkboxen-in-powershell-mittels-schleife-3335869463.html

Ausgedruckt am: 21.04.2025 um 23:04 Uhr

colinardo
Lösung colinardo 14.07.2022 aktualisiert um 11:24:49 Uhr
Goto Top
Servus.

Der Skriptblock für das Click-Event wird erst zur Laufzeit ausgeführt wenn der User die Checkbox anklickt, ergo werden auch auch die Variablen erst dann expandiert wenn die Form läuft und nicht schon wenn die Checkboxen generiert werden. Das ist auch der Grund warum deine Events immer das letzte Share verwenden, weil nach dem letzten Lauf des For-Loops die Variable $share ja mit dem letzen Object der CSV belegt ist.

Folgendes behebt diesen Umstand in der Event-Prozedur
$cb.add_click({
    Add-ADGroupMember -Identity ($shares | ?{$_.Name -eq $this.Name}).Group -Server $srv1 -Members $aduser
})
Grüße Uwe
Schem0t4pe
Schem0t4pe 14.07.2022 um 15:57:25 Uhr
Goto Top
Wahnsinn, danke dir vielmals, das wäre ich von allein nicht drauf gekommen
colinardo
colinardo 14.07.2022 um 16:09:04 Uhr
Goto Top
Immer gerne 👍