Benutzer mit den meisten Antworten
Skript sich in der ISE ausführen, per Rechtsklick "Mit Powershell ausführen" aber nicht.

Frage
-
Hallo zusammen,
ich habe ein Skript geschrieben, in welchem ich unter anderem Forms verwende (speziell die Checkbox).
Wenn ich dieses Skript über den "grünen Pfeil" oben in der ISE ausführe, funktioniert alles wie gewollt.Wenn ich nun aber (was eigentlich das Ziel ist) auf die .ps1 Datei einen Rechtsklick mache und "Mit PowerShell ausführen" auswähle, bekomme ich folgenden Fehler:
Fehler beim Aufrufen der Methode, da [System.Windows.Forms.CheckBox] keine Methode mit dem Namen "op_Addition" enthält...
Der Fehler liegt also bei dem += Operator, mit denen ich mehrere Checkboxen verknüpfe um später den Namen der ausgewählten Boxen auszulesen.
Wie kann es sein, dass dieser Fehler auftritt und - viel wichtiger - wie kann ich ihn beheben?
Vielen Dank schon mal! :-)
- Bearbeitet german_erd Mittwoch, 7. August 2019 10:34
Antworten
-
Hast du du die globale Variable am Anfang des Scripts auch korrekt als Array definiert?
$global:checkboxes = @()
- Als Antwort markiert german_erd Donnerstag, 8. August 2019 10:59
Alle Antworten
-
Ich gehe durch den $customer Array und erstelle eine Checkbox für jeden Kunden in diesem Array:
foreach ($c in $customer) {
$cbheight += 20
$checkBox = New-Object System.Windows.Forms.CheckBox
$checkBox.Font = "Microsoft Sans Serif,14"
$checkBox.Name = "$c"
$checkBox.Text = "$c"
$checkbox.Location = New-Object System.Drawing.Size (20, $cbheight)
$checkbox.Size = New-Object System.Drawing.Size (345, 23)
$checkBox.SendToBack()
$checkBox.checked = $true
$objForm.Controls.Add($checkBox)
$global:checkboxes += $checkbox
}Der Fehler tritt dann bei der letzten Zeile auf. Aber wie gesagt nur, wenn ich das ganze "Mit Powershell ausführe". Wenn ich das Skript in der ISE ausführe, klappt alles. Das gilt auch für den Fall, wenn ich vorher alle Variablen lösche.
Ich erstelle diese Variable, damit ich mit:
$global:selectedCusts = $global:checkboxes | Where-Object {$_.Checked} |Select -Expand Name
später die ausgewählten Checkboxes abgreifen kann
-
Hast du du die globale Variable am Anfang des Scripts auch korrekt als Array definiert?
$global:checkboxes = @()
- Als Antwort markiert german_erd Donnerstag, 8. August 2019 10:59
-
Genau das hat das Problem gelöst - das habe ich schlichtweg vergessen... Danke bfuerchau!
Ich verstehe zwar noch nicht so ganz, wieso es dann in der ISE funktioniert, sonst nicht (ich cleane ja am Start alle Variablen) aber ich beschwere mich nicht
-
Da die ISE ggf. intelligenter als Powershell selber ist, hat diese das Verhalten ggf. analysiert und automatisch ein Array angelegt. Sauberer Programmierstil ist das allerdings nicht.
Zumal ja die Powershell sowieso nicht typsicher ist:
Jede Zuweisung kann den Typ der Variablen ändern.