crashzero
Goto Top

Powershell FORM beim starten direkt Befehl ausführen

Moin,

ich erstelle mit Visual Studio 2019 eine Windows Form die 3 Dienste (Status "Running" oder eben Status "Stopped" in einer TextBox anzeigt.

Dort gibt es Buttons die diese Dienste Starten, beenden oder neustarten können.

Wenn einer diese Buttons geklickt wird ändert sich die TextBox Anzeige zum jeweiligen Status UND die TextBox wird beim Status "Running" als BackColor grün (lime) und beim Status "Stopped" rot (red) eingefärbt.

Soweit klappt auch alles.

Nun ist es so das wenn die Form gestartet wird diese Textbox zwar den Status (Running oder Stopped) korrekt in der TextBox (Enabled = False) anzeigt aber nach dem Start noch kein korrekten BackColor setzt.

Wie kriege ich das hin das bereits beim Start diese Prüfung (Ist das korrekt so ?) ausgeführt und die Textboxen entsprechend gefärbt werden ?

$dienststatuspapsftpTextBox.Text = ($papsftpService.status.ToString());
$dienststatuspapwebcronTextBox.Text = ($papwebcronservice.status.ToString());
$dienststatuspapdicomserverTextBox.Text = ($papdicomserverservice.status.ToString());

$dienststatuspapsftpTextBox.Refresh()
$dienststatuspapdicomserverTextBox.Refresh()
$dienststatuspapwebcronTextBox.Refresh()

       if ($papsftpService -eq "Stopped") {$dienststatuspapsftpTextBox.BackColor = 'lime'}   
        else { $dienststatuspapsftpTextBox.BackColor = 'red'}  
       if ($papdicomserverService -eq "Stopped") {$dienststatuspapdicomserverTextBox.BackColor = 'lime'}   
        else { $dienststatuspapdicomserverTextBox.BackColor = 'red'}  
       if ($papwebcronService -eq "Stopped") {$dienststatuspapwebcronTextBox.BackColor = 'lime'}   
        else { $dienststatuspapwebcronTextBox.BackColor = 'red'}  

bzw. wo muß ich diesen Code (Richtig?) einsetzen damit das beim Start direkt greift ?

Hinter [void]$windows.ShowDialog() ?
Vor [void]$windows.ShowDialog() ?
Refresh() nach if ... else oder vor ? (Würde mal sagen nach dem If...Else...)
Ganz am Anfang des Scripts ?

oder gibt es eine Scriptanweisung ala OnFormLoad() ?

Google hat mir da nicht wirklich weitergeholfen oder ich habe falsch gesucht.

BackGround-Color-Change funktionirt einwandfrei bei Klick auf den entsprechenden Button wenn die Form bereits gestartet ist (z.B. Dienst stoppen färbt die TextBox erfolgreich rot und der Dienststatus wird korrekt angezeigt.

Der derzeitige Status der Dienste wird bereits ganz am Anfang des Script abgefragt und abgelegt :

$Servicepapsftp = 'PAPSFTP'
$Servicewebcron = "PAPWebcron"
$Servicedicomserver = "PAPDicomServer"

$papsftpService = Get-Service -Name $Servicepapsftp
$papwebcronservice = Get-Service -Name $Servicewebcron
$papdicomserverservice = Get-Service -Name $Servicedicomserver

Content-ID: 7393447011

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

Ausgedruckt am: 16.11.2024 um 23:11 Uhr

papapishu
papapishu 02.06.2023 um 10:04:21 Uhr
Goto Top
Hi Crashzero,

ich würde deine Abfrage der Dienste als Funktion definieren und diese direkt nach dem erstellen einmal aufrufen.
Dem Button dann ebenfalls die Funktion zuweisen. Zur Positionierung erstellst du erstmal die Form, dann die Funktion und dann den Button der diese aufruft.

Grüße
TK1987
TK1987 02.06.2023 aktualisiert um 10:30:40 Uhr
Goto Top
Moin,

Zitat von @Crashzero:
Nun ist es so das wenn die Form gestartet wird diese Textbox zwar den Status (Running oder Stopped) korrekt in der TextBox (Enabled = False) anzeigt aber nach dem Start noch kein korrekten BackColor setzt.

Wie kriege ich das hin das bereits beim Start diese Prüfung (Ist das korrekt so ?) ausgeführt und die Textboxen entsprechend gefärbt werden ?
indem du den Code in das Load-Event der Form packst.
$MyForm.Add_Load({
  # Hier dein Code zum überprüfen und einfärben.
})

Gruß Thomas
Crashzero
Crashzero 02.06.2023 aktualisiert um 11:02:39 Uhr
Goto Top
Hy,

danke.
Das hatte ich auch schon probiert und nun nochmal eingerichtet.
Einen Dienst habe ich gestartet aber die Textbox bleibt rot.

$window.Add_Load({
$Servicepapsftp = 'PAPSFTP'  
$Servicewebcron = "PAPWebcron"  
$Servicedicomserver = 'PAPDicomServer'  

$papsftpService = Get-Service -Name $Servicepapsftp
$papwebcronservice = Get-Service -Name $Servicewebcron
$papdicomserverservice = Get-Service -Name $Servicedicomserver

    $dienststatuspapsftpTextBox.Text = ($papsftpService.status.ToString());
    $dienststatuspapwebcronTextBox.Text = ($papwebcronservice.status.ToString());
    $dienststatuspapdicomserverTextBox.Text = ($papdicomserverservice.status.ToString());
        Write-Host PAPSFTP : $papsftpService
        Write-Host PAPWebcron : $papwebcronservice
        Write-Host PAPDicomServer : $papdicomserverservice
            Start-Sleep 5
       if ($papsftpService -eq 'Stopped') {$dienststatuspapsftpTextBox.BackColor = 'red'}   
       $dienststatuspapsftpTextBox.Refresh()

       if ($papdicomserverService -eq 'Stopped') {$dienststatuspapdicomserverTextBox.BackColor = 'red'}   
       $dienststatuspapdicomserverTextBox.Refresh()

       if ($papwebcronService -eq 'Stopped') {$dienststatuspapwebcronTextBox.BackColor = 'red'}   
       $dienststatuspapwebcronTextBox.Refresh()

       if ($papsftpService -eq 'Running') {$dienststatuspapsftpTextBox.BackColor = 'lime'}   
       $dienststatuspapsftpTextBox.Refresh()

       if ($papdicomserverService -eq 'Running') {$dienststatuspapdicomserverTextBox.BackColor = 'lime'}   
       $dienststatuspapdicomserverTextBox.Refresh()

       if ($papwebcronService -eq 'Running') {$dienststatuspapwebcronTextBox.BackColor = 'lime'}   
       $dienststatuspapwebcronTextBox.Refresh()

})

Hab das ganze mal zum Testen auseinandergezogen.

In der Write-Ausgabe
Write-Host PAPSFTP : $papsftpService
Write-Host PAPWebcron : $papwebcronservice
Write-Host PAPDicomServer : $papdicomserverservice

kommt auch die korrekte Ausgabe :
Running
Stopped
Stopped

Aber die Textboxen haben sich nicht geändert.

Meldung :
In C:\Users\xxxxx\source\repos\CCP2\CCP2\CCP2.ps1:10
[ERROR] Zeichen:1
[ERROR] + $MyForm.Add_Load({
[ERROR] + ~~~~~~~~~~~~~~~~~~
[ERROR] + CategoryInfo : InvalidOperation: (face-smile [], RuntimeException
[ERROR] + FullyQualifiedErrorId : InvokeMethodOnNull
Crashzero
Lösung Crashzero 02.06.2023 um 11:22:44 Uhr
Goto Top
Gelöst :

if ($papsftpService.status -eq "Running")  {$dienststatuspapsftpTextBox.BackColor = 'lime'}    
     if ($papwebcronService.status -eq "Running")  {$dienststatuspapwebcronTextBox.BackColor = 'lime'}   
     if ($papdicomserverservice.status -eq "Running")  {$dienststatuspapdicomserverTextBox.BackColor = 'lime'}   

     if ($papsftpService.status -eq "Stopped")  {$dienststatuspapsftpTextBox.BackColor = 'red'}    
     if ($papwebcronService.status -eq "Stopped")  {$dienststatuspapwebcronTextBox.BackColor = 'red'}   
     if ($papdicomserverservice.status -eq "Stopped")  {$dienststatuspapdicomserverTextBox.BackColor = 'red'}   

Vor [void]$windows.ShowDialog() gesetzt.