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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
3 Kommentare
Neuester Kommentar
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
Grüße Uwe
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
})