Jump to content

Monitoring mit Hilfe einer Powershell Gui


Recommended Posts

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 to post

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 to post
vor 33 Minuten schrieb MurdocX:

Dort sind 100 Sensoren kostenfrei einsetzbar.

Das ist schon das erste Problem... :lool:

vor 34 Minuten schrieb MurdocX:

Die Powershell ist keine einfache Sprache für eine GUI Entwicklung.

Ich habe bzw, ich musste mich bewusst für Powershell entscheiden. Es steht soweit schon alles. Mir fehlt nur noch diese GUI...

Link to post
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 to post
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

  • Like 2
Link to post
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 to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...