Powershell HashTable und Listbox?
Hallo,
ich hab eine Frage an die, die sich mit Powershell Scripts auskennen. Ich habe mir mit Visual Studio Code ein WPF GUI erstellt und benutze das mit Powershell. Soweit funktioniert alles. Jetzt möchte ich aber die Inhalte eines Hashtables jeweils in meine Listbox schreiben.
Das HashTable sieht z.B. so aus:
[PSCustomObject]@{
ProfileName = $profile;
Password = $Key
Diesen möchte ich dann für jeden Eintrag in eine neue Zeile meiner Listbox machen, also in folgendem Stil:
[void]$listBox.Items.Add("Profilname: "+$profile+" Passwort: "+$Key)
Leider komme ich hier einfach nicht weiter, vielleicht kennt ja jemand hier die Antwort...
vielen Dank für alle Antworten im Voraus
1 Antwort
...Ähm...
Listbox ist ne schlechte Idee eine Listbox zeigt einfach Text an...
Listview ist das was Du brauchst:
Demo.PS1
Add-Type -AssemblyName System.Windows.Forms
$sampleForm = New-Object System.Windows.Forms.Form
$sampleForm.Width = 500
$sampleForm.Height = 300
# erzeuge Listview !nicht Listbox!
$listView = New-Object System.Windows.Forms.ListView
#settings
$listView.View = 'Details'
$listView.Width = 500
$listView.Height = 300
$listview.FullRowSelect = $True
$listview.GridLines = $True
#erzeuge die passenden Spalten
$listView.Columns.Add('ID')
$listView.Columns.Add('ProfileName')
$listView.Columns.Add('Password')
# ich bin ein Faulpelz, das Herumgerötel mit [PSCustomObject]erspare ich mir einfach und erzeuge die Objekte einfach mit Hilfe eines CSV
#der Header tut nichts anderes, als das Object zu defineren
$MyDataSheets = @'
ID,ProfileName,Password
1,SchinderHannes,1234
2,Mickymaus,Rumpelheinz
3,Suppehhuhn,Katzenpups
4,SchrubbMirDenRuecken,Seifenschaum
'@ | ConvertFrom-Csv
# natürlich steht es Dir frei ein Objekt vo hand zu definieren und zur Liste hinzuzfügen (aber wer will das schon wennman mit einer Zeile CSV ein ganzes Object bastelt,
$MyDataSheets += [PSCustomObject]@{
ID = 7
ProfileName = 'SelbstgestriktObject'
Password = 'Minipippi'
}
#die super kompatible Methode
$myHashtable= @{
ID = 99
ProfileName = 'vomSimpleHashtable'
Password = 'kis<dsoeo'
}
$MyDataSheets += New-Object -TypeName PSObject -Property $myHashtable
'
mal das Array of Customobjects anzeigen'
$MyDataSheets
# Dene HashArray der Listview zuweisen
$MyDataSheets|%{
$item = New-Object System.Windows.Forms.ListViewItem($_.ID)
# Spalten belegen
$item.SubItems.Add($_.ProfileName)
$item.SubItems.Add($_.Password)
# hinzufügen
$listView.Items.Add($item)
}|out-null
#jetzt, wo wir die Felder belegt haben passen wir die Breite der Spalten automatisch an https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.columnheaderautoresizestyle?view=netframework-4.7.2
$ListView.AutoResizeColumns(1)
$sampleForm.Controls.Add($listView)
[void] $sampleForm.ShowDialog()
...ich weiß ja nicht was Du vorhast und welche Programmierskills Du hast..., aber das ganze kannst Du viel "billiger" bekommen
@'
ID,ProfileName,Password
1,SchinderHannes,1234
2,Mickymaus,Rumpelheinz
3,Suppehhuhn,Katzenpups
4,SchrubbMirDenRuecken,Seifenschaum
'@ | ConvertFrom-Csv|Out-GridView -OutputMode single
wollte ich mir die Arbeit erleichtern, mittels Powershell.
...😅komische Auffassung von Arbeitserleichterung...
...Um einen Nagel in die Wand zu kloppen baust Du eine gigantische Maschine... (das hat schon einen Touch von Rube-Goldberg , dabei hat obige Demo noch keinerlei Funktionalität als eine Tabelle anzuzeigen...)
...klar kann man Machen... aber Powershell ist eher ein Werkzeug mit dem man in einer Zeile etwas automatisch erledigen lässt und der Nutzer garnichts davon mitbekommt.
Wenn es sich als wirklich nötig erweist, mit dem Nutzer zu interagieren reicht ein ganz normaler Conslol-Input oder maximal ein ComObject . ...oder Gridview, um einen Datensatz auszuwählen.
Wenn Du einen halben Tag darüber Grübeln musst , wie man eine Tabelle anzeigt ...🤪🤪🤪 , ist das teuerste "Menü" aller Zeiten.
Auf das mit dem Listview wär ich wirklich nicht gekommen auf die schnelle, danke :) Bin eigentlich mehr beim Entwickeln von Android Apps. Aber weil ich gerade noch ein bisschen mit LDAP arbeiten muss, wollte ich mir die Arbeit erleichtern, mittels Powershell...