speedz
Goto Top

PowerShell - Funktionsergebnis in GUI darstellen

Hallo zusammen,

ich habe ein PowerShell Skrip, welches eine GUI erstellt. In dieser GUI möchte ich gerne alle aktiven Netzwerkadapter und ein paar Daten dazu darstellen. Das mache ich über folgende Funktion:

$_connected_network_adapter = get-wmiobject win32_networkadapter -filter "netconnectionstatus = 2" | select netconnectionid, name, interfaceindex, netconnectionstatus, adaptertype, speed  
$_default_routing = get-wmiobject win32_ip4routetable | ? {$_.Destination -eq "0.0.0.0"}   
foreach ($entry in $_connected_network_adapter){
foreach ($entry1 in $_default_routing){ 
If ($entry.interfaceindex -eq $entry1.interfaceindex){
netsh interface ip show config $entry.netconnectionid
} 
} 
}

Jetzt möchte ich dieses Ergebnis in einer GUI darstellen, und zwar genau so sauber, als wenn ich den Code direkt in die Console schreibe. In meiner GUI habe ich es mit einem Textfeld probiert, bekomme hier aber Probleme mit den Zeilenumbrüchen, weil er das Ergebnis nicht wie in der Console nach jeder Zeile umbricht.

Das hier ist mein kompletter Code:
#-----------------------------------------------------------------------------------
# Main
#-----------------------------------------------------------------------------------


Function Main
{
	$vNetzwerk = Get-Netzwerkadapter
	GenerateForm
}

#-----------------------------------------------------------------------------------
# Formular Allgemein
#-----------------------------------------------------------------------------------

Function GenerateForm
{
	[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
	[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
	
	$Form = New-Object System.Windows.Forms.Form
	$Icon = New-Object System.Drawing.Icon ("C:\Program Files (x86)\PCInfo\PCID.ico")  
	$LabelNetzwerk = New-Object System.Windows.Forms.Label
	
	$Form.Text = "PC INFO"  
	$Form.StartPosition = "CenterScreen"  
	$Form.AutoScroll = $False
	$Form.AutoSize = $True
	$Form.TopMost = $True
	$Form.WindowState = "Normal"  
	$Form.Icon = $Icon
	$Form.ShowInTaskbar = $True
	$Form.MaximumSize = New-Object System.Drawing.Size(665,470)
	$Form.MinimumSize = New-Object System.Drawing.Size(665,470)

	$FontLabel = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Regular)  
	# Font Styles: Regular, Bold, Italic, Underline, Strikeout
	$Form.Font = $FontLabel


#-----------------------------------------------------------------------------------
# Formular Registersteuerelement
#-----------------------------------------------------------------------------------

	$TabControl1 = New-Object System.Windows.Forms.TabControl
	$TabControl1.TabIndex = 0
	$TabControl1.Size = New-Object System.Drawing.Size(625,410)
	$TabControl1.Location = New-Object System.Drawing.Point(10,10) 
	$TabControl1.DataBindings.DefaultDataSourceUpdateMode = 0
	$TabControl1.Name = "TabControl1"  
	$TabControl1.SelectedIndex = 0
	$Form.Controls.Add($TabControl1)

	#Auswahlseite "PC Informationen" auf Registersteuerelement binden  
	$TabPC = New-Object System.Windows.Forms.TabPage
	$TabPC.TabIndex = 0
	$TabPC.UseVisualStyleBackColor = $False
	$TabPC.Text = "PC Informationen"  
	$TabPC.Name = "PC Informationen"  
	$TabControl1.Controls.Add($TabPC)

	#Auswahlseite "Netzwerkinformationen" auf Registersteuerelement binden  
	$TabNetwork = New-Object System.Windows.Forms.TabPage
	$TabNetwork.TabIndex = 1
	$TabNetwork.UseVisualStyleBackColor = $False
	$TabNetwork.Text = "Netzwerkinformationen"  
	$TabNetwork.Name = "Netzwerkinformationen"  
	$TabControl1.Controls.Add($TabNetwork)
	
#-----------------------------------------------------------------------------------
# Formular Inhalt - Kategorie Netzwerkinformationen
#-----------------------------------------------------------------------------------	
	
	#Labels für Netzwerkinformationen
	$LabelNetzwerk.Location = New-Object System.Drawing.Size(10,10)
	$LabelNetzwerk.Size = New-Object System.Drawing.Size(300,370)
	$LabelNetzwerk.Text = $vNetzwerk
	$LabelNetzwerk.Name = "vNetzwerk"  
	$LabelNetzwerk.Font = $FontLabel
	$TabNetwork.Controls.Add($LabelNetzwerk)
	
		
	#ListBox Netzwerkinformationen
	#$ListBoxNetwork = New-Object System.Windows.Forms.ListBox
	#$ListBoxNetwork.Location = New-Object System.Drawing.Point(10,10)
	#$ListBoxNetwork.Size = New-Object System.Drawing.Size(600,370)
	#$TabNetwork.Controls.Add($ListBoxNetwork)
	#$Form.Topmost = $true
	
#-----------------------------------------------------------------------------------
# Formular Anzeigen
#-----------------------------------------------------------------------------------	

	[void] $Form.ShowDialog()
}

#-----------------------------------------------------------------------------------
# Funktionen
#-----------------------------------------------------------------------------------	

Function Get-Netzwerkadapter
{   
	$_connected_network_adapter = get-wmiobject win32_networkadapter -filter "netconnectionstatus = 2" | select netconnectionid, name, interfaceindex, netconnectionstatus, adaptertype, speed  
	$_default_routing = get-wmiobject win32_ip4routetable | ? {$_.Destination -eq "0.0.0.0"}   
	foreach ($entry in $_connected_network_adapter){
		foreach ($entry1 in $_default_routing){ 
			If ($entry.interfaceindex -eq $entry1.interfaceindex){
			$Netzwerk = netsh interface ip show config $entry.netconnectionid
			return $Netzwerk
			} 
		} 
	}
}


# Aufruf der Funktion "Main"  
Main

Content-Key: 535768

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

Printed on: April 19, 2024 at 12:04 o'clock

Member: Speedz
Speedz Jan 16, 2020 at 06:13:56 (UTC)
Goto Top
Ich habe auch schon eine Listbox erzeugt, habe es aber damit gar nicht geschafft, überhaupt Informationen angezeigt zu bekommen.

Ich hoffe, jemand von euch hat noch eine passende Idee dazu.

Vielen Dank schonmal im Voraus.

VG, Speedz
Member: MrCount
MrCount Jan 16, 2020 at 07:43:51 (UTC)
Goto Top
Servus,

versuche mal

$ListBox = New-Object System.Windows.Controls.ListBox
$ListBox.ItemsSource = $ListBoxNetwork
Member: Speedz
Speedz Jan 16, 2020 at 09:58:50 (UTC)
Goto Top
Hallo,

das funktioniert leider nicht, oder aber ich binde die Codeelemente falsch ein...

Habe es jetzt mal über einen Button probiert der die Aktion auslösen soll und zusätzlich ein Listviev angepasst.

	$ListView1 = New-Object system.windows.Forms.ListView 
	$ListView1.Text = "listView"  
	$ListView1.Width = 500
	$ListView1.Height = 270
	$ListView1.location = new-object system.drawing.point(100,100)
	$ListView1.ItemSource = $vNetzwerk 
	$TabNetwork.Controls.Add($ListView1) 



	$Button1.Add_Click({
		$vNetzwerk = Get-Netzwerkadapter
		$ListView1.ItemsSource = $vNetzwerk 
	})

Ich bekomme, egal wie ich es einbinde, immer die Fehlermeldung: Die Eigenschaft "ItemsSource" wurde für dieses Objekt nicht gefunden.
Member: MrCount
MrCount Jan 16, 2020 at 10:28:12 (UTC)
Goto Top
Member: mayho33
mayho33 Jan 17, 2020 at 18:16:58 (UTC)
Goto Top
Hi!

Ohne das jetzt getestet zu haben:

Alles vorher in eine List<ClassModel> einlesen und dann mit String.Format("{0} /t /t{1}", varA, varB) ausgeben?

Grüße!