it-frosch
Goto Top

Variable assigned but never used

Hallo Kollegen,

ich habe eine GUI mit mehreren Schaltern für verschiedene Aufgaben.
Außerdem gib es einen "Ausführen" Schalter für alle Aufgaben.
Ich möchte, dass bei beim Betätigen des "Ausführen" Schalters bei den Aufgaben-Schaltern.
die noch nicht programmiert sind eine Meldung ausgegeben wird.

So habe ich mir das gedacht:
# diese Variable soll die aktuelle Aufgabe enthalten
# Am Anfang des Scripts setzte ich sie auf 0
$currenttask = 0  

# Jeder Aufgaben-Schalter enthält im .Add_Click Aktionsteil
    $currenttask =  10001
# wobei die Nummer bei jedem Aufgaben-Schalter unterschiedlich ist

# Im Aktionsteil des "Ausführen" Schalters frage ich die Variable ab. 
.Add_Click({
    if  ($currenttask -eq 10001) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10002) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10003) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10004) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10006) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10007) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10008) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10009) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10010) {AppendToTextBox_Red("Noch nicht implementiert `n")}  

Soweit die Theorie. Mein Problem ist, dass ich in PS Code die Meldung bekomme:
The variable 'currenttask' is assigned but never used.

Irgendwie sehe ich den Wald vor lauter Bäumen nicht.
Könnte mir jemand von den Profis mal einen Tritt in die richtige Richtung geben? face-wink

Lösung
Das Problem ist der Scope der Variable.
Wenn ich im Aufgaben-Schalter .Add_Click Block die Variable als
$script:currenttask definiere, kann ich sie im Ausführen-Schalter Block auch auslesen.


Grüße vom it-frosch

Content-ID: 11367301626

Url: https://administrator.de/contentid/11367301626

Ausgedruckt am: 03.12.2024 um 17:12 Uhr

erikro
Lösung erikro 01.11.2023 um 16:28:24 Uhr
Goto Top
Moin,

if($currenttask -eq 10001)

hth

Erik
it-frosch
it-frosch 01.11.2023 aktualisiert um 18:06:50 Uhr
Goto Top
@erikro
OMG :D - Da hatte ich wohl noch SQL im Kopf. Damit sind die 9 Ausgaben weg.
Habe es oben im Code korrigiert.

Die Meldung
The variable 'currenttask' is assigned but never used.
bekomme ich noch immer.

Hast du dazu noch eine Idee?

grüße vom it-frosch
erikro
erikro 01.11.2023 um 17:06:21 Uhr
Goto Top
Zitat von @it-frosch:

@erikro
OMG :D - Da hatte ich wohl noch SQL im Kopf. Damit sind die 9 Ausgaben weg aber die Meldung
Habe es oben im Code korrigiert.

Die Meldung
The variable 'currenttask' is assigned but never used.
bekomme ich noch immer.

Hast du dazu noch eine Idee?

grüße vom it-frosch

Poste mal den vollständigen Code.
it-frosch
it-frosch 01.11.2023 um 17:14:08 Uhr
Goto Top
@erikro

Das ist der Code für einen Aufgaben-Schalter. Hier wird mir die Variable von VS Code schon mit gewellter Linie unterstrichen und ich bekomme die Meldung.

# Code des Aufgaben-Schalters

# TaskButton7 - Bezeichnung der Auftrag 10007 - aktiv
$taskButton7 = New-Object System.Windows.Forms.Button
$taskButton7.Location = New-Object System.Drawing.Point(400, 530)
$taskButton7.Size = New-Object System.Drawing.Size(230, 50)
$taskButton7.BackColor = 'LightGreen'   
$taskButton7.Text = "Bezeichnung der Auftrag 10007"    
$taskButton7.Add_Click({
    $form.Controls.Remove($label_Task1)
    $form.Controls.Remove($rtfbox1)
    $form.Controls.Remove($label_Task2)
    $form.Controls.Remove($rtfbox2)
    $form.Controls.Remove($label_Task3)
    $form.Controls.Remove($rtfbox3)
    $form.Controls.Remove($label_Task4)
    $form.Controls.Remove($rtfbox4)
    $form.Controls.Remove($label_Task5)
    $form.Controls.Remove($rtfbox5)
    $form.Controls.Remove($label_Task6)
    $form.Controls.Remove($rtfbox6)
    $form.Controls.Remove($label_Task8)
    $form.Controls.Remove($rtfbox8)
    $form.Controls.Remove($label_Task9)
    $form.Controls.Remove($rtfbox9)
    $form.Controls.Add($label_Task7)
    $form.Controls.Add($rtfbox7)
    $form.Controls.Remove($textBox1)
    $form.Controls.Remove($textBox2)
    $form.Controls.Remove($label1)
    $form.Controls.Remove($label3)
    $form.Controls.Remove($label5)
    $form.Controls.Remove($label7)
    $form.Controls.Remove($label2)
    $form.Controls.Remove($label4)
    $form.Controls.Remove($label6)
    $form.Controls.Remove($label8)
    $form.Controls.Remove($label9)
    $form.Controls.Remove($label10)
    $form.Controls.Remove($label11)
    $textBox1.Text = ""  
    $textBox1.BackColor = 'White'  
    $form.Controls.Remove($button3)
    $form.Controls.Add($button2)
    $currenttask =  10007
})

# Code des "Ausführen" Schalters  
# Create button 2 to open the folder picker dialog for folder 2
$button2 = New-Object System.Windows.Forms.Button
$button2.Location = New-Object System.Drawing.Point(260, 180)
$button2.Size = New-Object System.Drawing.Size(100, 40)
$button2.Text = "Änderungen durchführen"   
#$button2.BackColor =  
$button2.Add_Click({
    if  ($currenttask -eq 10001) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10002) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10003) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10004) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10006) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10007) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10008) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10009) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
    if  ($currenttask -eq 10010) {AppendToTextBox_Red("Noch nicht implementiert `n")}  
           
})
it-frosch
it-frosch 01.11.2023 um 17:18:25 Uhr
Goto Top
Wenn ich eine leere PS1 Datei nehme und nur

$currenttask = 0

function set_currenttask($wert) {
    $currenttask = $wert
}

hineinschreibe, habe ich denselben Fehler.

The variable 'currenttask' is assigned but never used.
opsec2022
Lösung opsec2022 01.11.2023 um 18:11:47 Uhr
Goto Top
Hallo,

scheint ein false-positive im PSScriptAnalyze zu sein, da die Variable in einem anderen Scope verwendet wird. Siehe Hier.

Deaktivieren kannst du die Meldung mit folgendem Inline-Attribut:

[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'currenttask', Justification = 'Wird in einem anderem Scope verwendet')]  

Gruß
OpSec
mbehrens
mbehrens 01.11.2023 um 18:33:42 Uhr
Goto Top
Zitat von @it-frosch:

Wenn ich eine leere PS1 Datei nehme und nur

$currenttask = 0

function set_currenttask($wert) {
    $currenttask = $wert
}

hineinschreibe, habe ich denselben Fehler.

The variable 'currenttask' is assigned but never used.

Zum einen ist es ja nur eine Warnung und kein Fehler, zum anderen wird die Variable im Programmablauf auch nie genutzt.
it-frosch
it-frosch 01.11.2023 aktualisiert um 18:39:54 Uhr
Goto Top
@mbehrens

zum anderen wird die Variable im Programmablauf auch nie genutzt.
doch sie wird benutzt.
Ich setze sie im Aufgaben-Schalter und frage sie im Ausführen-Schalter ab.
Der Wert den ich oben setze ist im Debugging im Watch nicht sichtbar.

@opsec2022
Ich belese mich auch gerade und bin auch auf der "Scope" Fährte.
Ich denke im Moment, dass jeder Add_Click Block eines Schalters in einem eigenen Scope läuft.