Jump to content

Monitoring mit Hilfe einer Powershell Gui


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich beiß mir momentan die Zähne aus beim Erstellen eines kleinen Monitoring-Tools für meine "weniger technisch begabten Kollegen" :grins2:.

 

Die Idee:

alle 43 Standorte die jeweiligen Geräte mittels "Test-Connection" abfragen. Dies sind je Standort 1-3 Systeme + Router.

 

Jetzt wollte ich mit Hilfe einer GUI den Online Status mit einem grünen Button darstellen. Beim Klick auf dem Button soll eine eine neues Fenster erscheinen mit den jeweiligen Befehlen.

Beispiel von mir aus Visual Studio:

 

grafik.png.c66fb2cb5b0fa4388e267e392f3e7c44.png

 

Versucht hätte ich es mit folgenden:

Mit XML: Stackpanel, Dockpanel, Grid (nur mit XML finde ich es noch verwirrender. Wobei wenn nötig würde ich mich hier weiter rein kämpfen.)

ohne XML: GridView, DataGridView, ListView

 

Am besten klappte es, für mich persönlich, bisher mit "DataGridView":

 

$Standort = @("001","002","003","004","005")

function Add-Server{
	Param (
		$Standort = "",
		$SystemXY1 = "",
        $SystemXY2 = "",
        $SystemXY3 = "",
        $Router = ""	    
    )
	$DataGridView_ServerName.Rows.Add($Standort, $SystemXY1, $SystemXY2, $SystemXY3, $Router)   
}

#Load the GDI+ and WinForms Assemblies
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#Define Form
$form1 = New-Object System.Windows.Forms.Form
$form1.Text = ""
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Location = New-Object System.Drawing.Point(10, 10)
$form1.AutoSize = $true
$form1.WindowState = "Normal"
$form1.StartPosition = "CenterScreen"

#Definine DataGridView
$DataGridView_ServerName = New-Object System.Windows.Forms.DataGridView
$DataGridView_ServerName.AllowUserToAddRows = $false
$DataGridView_ServerName.AllowUserToDeleteRows = $false
$DataGridView_ServerName.Top = 10
$DataGridView_ServerName.Left = 10
$DataGridView_ServerName.AutoSize = $true
$DataGridView_ServerName.ColumnHeadersVisible = $true
$DataGridView_ServerName.ColumnHeadersHeight = 20
$DataGridView_ServerName.Enabled = $true

#Add Columns
$Column = New-Object System.Windows.Forms.DataGridViewTextBoxColumn
$Column.Width = 80
$Column.Name = 'Standort XY'
$DataGridView_ServerName.Columns.Add($Column) | Out-Null

$Column1 = New-Object System.Windows.Forms.DataGridViewButtonColumn
$Column1.Width = 70
$Column1.Name = 'System XY1'
$Column1.Text = 'Online!'
$DataGridView_ServerName.columns.Add($Column1) | Out-Null

$Column2 = New-Object System.Windows.Forms.DataGridViewButtonColumn
$Column2.Width = 70
$Column2.Name = 'System XY2'
$DataGridView_ServerName.Columns.Add($Column2) | Out-Null

$Column3 = New-Object System.Windows.Forms.DataGridViewButtonColumn
$Column3.Width = 70
$Column3.Name = 'System XY3'
$DataGridView_ServerName.Columns.Add($Column3) | Out-Null

$Column4 = New-Object System.Windows.Forms.DataGridViewButtonColumn
$Column4.Width = 70
$Column4.Name = 'Router'
$DataGridView_ServerName.Columns.Add($Column4) | Out-Null

$form1.Controls.AddRange(($DataGridView_ServerName))

#Add Rows
for([int]$i=0;$i -lt $Standort.count; $i++ ){
Add-Server $Standort[$i] "Check1" "Check2" "Check3" $Router
}

$form1.Add_Shown({$form1.Activate()})

$form1.ShowDialog()

 

 

Meine Frage nun:

Wie bekomme ich einen Farbwechsel hin wenn ein System zB offline geht? Ich dachte zuerst ich könnte den Background

des Buttons ändern aber bei "New-Object System.Windows.Forms.DataGridViewButtonColumn" lässt sich das nicht einstallen und bei "System.Windows.Forms.Button" kann ich es nicht in "DataGridView" hinzufügen.

 

Ich hoffe hier könnt mir helfen :)

Link zu diesem Kommentar

Hallo cosmo87,

 

mein Vorschlag wird dir nicht direkt bei deinem Powershell-Problem helfen, sollte aber die Anforderung insgesamt vereinfachen. Für solche Tasks gibt es effektivere und kostenlose Tools. Ein Vorschlag ist hierbei PRTG Network Monitor » Netzwerküberwachung all in one (paessler.com). Dort sind 100 Sensoren kostenfrei einsetzbar. Damit kann die Anforderung auch für deine Kollegen einfach umgesetzt werden. Das Tool hat eine einfache Bedienung für die die damit nicht so oft arbeiten.

 

# Update

Die Powershell ist keine einfache Sprache für eine GUI Entwicklung. Nächster Vorschlag: Schnapp Dir eine Visual Studio CommunityEdition. Pack dort die .Net-Formen rein und kompiliere eine Exe dafür. C# ist ähnlich zur Powershell und sollte  umsetzbar sein. In beiden Sprachen werden die .NET-Frameworks verwendet.

Link zu diesem Kommentar
vor 17 Stunden schrieb testperson:

dann guck dir bspw. Zabbix an. Das dürfte unterm Strich deutlich effektiver sein. In der Regel bekommt man ja beim Essen Hunger. ;-)

 

Das sieht ja mal auch sehr gut aus. Wird, wenn mal Zeit dafür ist.... , nochmal genauer begutachtet! Danke dafür!

 

BTT:

Ich stelle meine Frage mal einfacher:

Kann ich das Object "System.Windows.Forms.Button" den "BackgroundColor" ändern mit Hilfe einem Timers ".add_tick(if/else)"?

Bzw. das Ergebnis von if/else als button.text anzeigen lassen?

 

Link zu diesem Kommentar
Am 21.9.2021 um 14:48 schrieb cosmo87:

Meine Frage nun:

Wie bekomme ich einen Farbwechsel hin wenn ein System zB offline geht? Ich dachte zuerst ich könnte den Background

des Buttons ändern aber bei "New-Object System.Windows.Forms.DataGridViewButtonColumn" lässt sich das nicht einstallen und bei "System.Windows.Forms.Button" kann ich es nicht in "DataGridView" hinzufügen.

 

Ich hoffe hier könnt mir helfen :)

Ja ;-)

 

Hier wurde deine Frage beantwortet: c# - Change color of Button in DataGridView - Stack Overflow

Link zu diesem Kommentar
vor 20 Stunden schrieb MurdocX:

Ja ;-)

 

Hier wurde deine Frage beantwortet: c# - Change color of Button in DataGridView - Stack Overflow

 

Danke dafür. Das hat mir etwas weiter geholfen :lool:

Jetzt überlege ich noch ob ich die Abfragen mit runspace laufen lassen in einer while-schleife laufen lassen kann und davon den rückgabewerte auslese.

Sozusagen:

.BackgrundColor = (if{runspaceXY}{red}else{red})

 

runspace deswegen weil es 75 Verbindungen sind und die zB. 1x alle 10 min abgefragt werden soll.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...