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-ID: 535768

Url: https://administrator.de/forum/powershell-funktionsergebnis-in-gui-darstellen-535768.html

Ausgedruckt am: 24.12.2024 um 18:12 Uhr

Speedz
Speedz 16.01.2020 um 07:13:56 Uhr
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
MrCount
MrCount 16.01.2020 um 08:43:51 Uhr
Goto Top
Servus,

versuche mal

$ListBox = New-Object System.Windows.Controls.ListBox
$ListBox.ItemsSource = $ListBoxNetwork
Speedz
Speedz 16.01.2020 um 10:58:50 Uhr
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.
MrCount
MrCount 16.01.2020 um 11:28:12 Uhr
Goto Top
mayho33
mayho33 17.01.2020 um 19:16:58 Uhr
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!