Powershell - richtige Verwendung dieses Array
Hallo Leute,
bin wiedermal auf eure Hilfe angewiesen.
kurze Info vorweg: Ich arbeite mit dem Sapien Powershell Studio 2014
In dieser GUI befindet sich eine "Listbox" . Mit dieser werden nur die Namen aufgelistet.
...diese Namen werden aus der "Hash-Table" ausgelesen und sollen dann dem "Listbox" übergeben werden.
Das funktioniert soweit.
Was ich haben möchte ist, wenn ich auf einen dieser Namen klicke, dann soll mir in den unten definierten "Textboxen" die dazu gehörigen Werte noch angezeigt werden (wie: Vorname; OU)
Funktionieren tut das ganze leider nicht, da er ja anscheinend nicht mehr in der Hashtable sucht, sondern nur in der Tabelle "Nachname"
Meine Frage an euch ? .. Wie kann ich das am besten umsetzen.
Vielen Dank schon mal
bin wiedermal auf eure Hilfe angewiesen.
kurze Info vorweg: Ich arbeite mit dem Sapien Powershell Studio 2014
In dieser GUI befindet sich eine "Listbox" . Mit dieser werden nur die Namen aufgelistet.
...diese Namen werden aus der "Hash-Table" ausgelesen und sollen dann dem "Listbox" übergeben werden.
Das funktioniert soweit.
Was ich haben möchte ist, wenn ich auf einen dieser Namen klicke, dann soll mir in den unten definierten "Textboxen" die dazu gehörigen Werte noch angezeigt werden (wie: Vorname; OU)
Funktionieren tut das ganze leider nicht, da er ja anscheinend nicht mehr in der Hashtable sucht, sondern nur in der Tabelle "Nachname"
Meine Frage an euch ? .. Wie kann ich das am besten umsetzen.
Vielen Dank schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266683
Url: https://administrator.de/forum/powershell-richtige-verwendung-dieses-array-266683.html
Ausgedruckt am: 22.12.2024 um 23:12 Uhr
6 Kommentare
Neuester Kommentar
Hallo today12,
Hier eine mögliche Beispiel-Form / Code sagt mehr als 1000 Worte:
(Kommentare findest du im Code)
-edit- Verwende doch ein DataGridView Steuerelement das mehrere Spalten unterstützt und stelle die Daten gleich in der Liste dar, Platz wäre ja genug da...Siehe das Beispiel weiter unten
Grüße Uwe
Hier eine mögliche Beispiel-Form / Code sagt mehr als 1000 Worte:
(Kommentare findest du im Code)
-edit- Verwende doch ein DataGridView Steuerelement das mehrere Spalten unterstützt und stelle die Daten gleich in der Liste dar, Platz wäre ja genug da...Siehe das Beispiel weiter unten
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$label3 = New-Object System.Windows.Forms.Label
$label2 = New-Object System.Windows.Forms.Label
$label1 = New-Object System.Windows.Forms.Label
$txtOU = New-Object System.Windows.Forms.TextBox
$txtNachname = New-Object System.Windows.Forms.TextBox
$txtVorname = New-Object System.Windows.Forms.TextBox
$lb1 = New-Object System.Windows.Forms.ListBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
# Beispieldaten generieren
$daten = @()
$daten += New-Object PSObject -Property @{Vorname="Max";Nachname="Muster";OU="Vertrieb"}
$daten += New-Object PSObject -Property @{Vorname="Ute";Nachname="Musterfrau";OU="Marketing"}
$daten += New-Object PSObject -Property @{Vorname="Sepp";Nachname="Meier";OU="Lager"}
$handler_form1_Load=
{
# Listbox mit den Namen füllen
$lb1.DataSource = $daten.Nachname
}
$handler_lb1_SelectedIndexChanged=
{
# wenn eine Auswahl existiert
if($lb1.SelectedIndex -ne -1){
# setze die Daten der Textboxen mit den gewünschten Index aus dem Daten-Array
$txtVorname.Text = $daten[$lb1.SelectedIndex].Vorname
$txtNachname.Text = $daten[$lb1.SelectedIndex].Nachname
$txtOU.Text = $daten[$lb1.SelectedIndex].OU
}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 318
$System_Drawing_Size.Width = 425
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Demo-ListBox-Selection-Change"
$form1.add_Load($handler_form1_Load)
$label3.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 292
$label3.Location = $System_Drawing_Point
$label3.Name = "label3"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 59
$label3.Size = $System_Drawing_Size
$label3.TabIndex = 6
$label3.Text = "OU"
$form1.Controls.Add($label3)
$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 195
$System_Drawing_Point.Y = 266
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 61
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 5
$label2.Text = "Nachname"
$form1.Controls.Add($label2)
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 266
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 17
$System_Drawing_Size.Width = 59
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 4
$label1.Text = "Vorname"
$form1.Controls.Add($label1)
$txtOU.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 77
$System_Drawing_Point.Y = 289
$txtOU.Location = $System_Drawing_Point
$txtOU.Name = "txtOU"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 112
$txtOU.Size = $System_Drawing_Size
$txtOU.TabIndex = 3
$form1.Controls.Add($txtOU)
$txtNachname.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 262
$System_Drawing_Point.Y = 263
$txtNachname.Location = $System_Drawing_Point
$txtNachname.Name = "txtNachname"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 151
$txtNachname.Size = $System_Drawing_Size
$txtNachname.TabIndex = 2
$form1.Controls.Add($txtNachname)
$txtVorname.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 77
$System_Drawing_Point.Y = 263
$txtVorname.Location = $System_Drawing_Point
$txtVorname.Name = "txtVorname"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 112
$txtVorname.Size = $System_Drawing_Size
$txtVorname.TabIndex = 1
$form1.Controls.Add($txtVorname)
$lb1.Anchor = 15
$lb1.DataBindings.DefaultDataSourceUpdateMode = 0
$lb1.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$lb1.Location = $System_Drawing_Point
$lb1.Name = "lb1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 238
$System_Drawing_Size.Width = 401
$lb1.Size = $System_Drawing_Size
$lb1.TabIndex = 0
$lb1.add_SelectedIndexChanged($handler_lb1_SelectedIndexChanged)
$form1.Controls.Add($lb1)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
Nachtrag
Hier noch eine Variante mit einem DataGridViewfunction GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$dgv = New-Object System.Windows.Forms.DataGridView
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
$daten = @()
$daten += New-Object PSObject -Property @{Vorname="Max";Nachname="Muster";OU="Vertrieb"}
$daten += New-Object PSObject -Property @{Vorname="Ute";Nachname="Musterfrau";OU="Marketing"}
$daten += New-Object PSObject -Property @{Vorname="Sepp";Nachname="Meier";OU="Lager"}
$handler_form1_Load=
{
$arrList = New-Object System.Collections.ArrayList
$arrList.AddRange($daten)
$dgv.DataSource = $arrList
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 262
$System_Drawing_Size.Width = 425
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Demo mit DataGridView"
$form1.add_Load($handler_form1_Load)
$dgv.Anchor = 15
$dgv.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dgv.Location = $System_Drawing_Point
$dgv.Name = "dgv"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 234
$System_Drawing_Size.Width = 401
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 7
$form1.Controls.Add($dgv)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm
Grüße Uwe
Zitat von @today12:
Deine Methode funktioniert ;) - aber ich kann ja 600 Benutzer händisch anlegen .
Hast du noch einen Tipp für mich ?
Hallo today12,Deine Methode funktioniert ;) - aber ich kann ja 600 Benutzer händisch anlegen .
Hast du noch einen Tipp für mich ?
das ganze war ja nur ein Beispiel und die Daten hatte ich nur manuell angelegt damit was zum Anzeigen da war !
Selbst verständlich kannst du das Array auch über eine Schleife mit deinen Daten befüllen.
Du erstellst wie in meinem Beispiel ein leeres Array
$daten = @()
foreach($user in $users){
$daten += New-Object PSObject -Property @{Vorname=$user.FirstName;Nachname=$user.LastName;OU=$user.OU}
}
Grüße Uwe
Zitat von @today12:
Danke, aber ich komm einfach nicht drauf... dürfe wohl einen großen Denkfehler haben =(
Yup den hast du leider, das Array hast du nicht außerhalb der Schleife deklariert, so wird es ja immer wieder überschrieben . Da du den Code hier nicht in Code-Tags gesetzt hast folgender berichtigter Code ohne Gewähr auch weil ich den kompletten Code nicht kenne:Danke, aber ich komm einfach nicht drauf... dürfe wohl einen großen Denkfehler haben =(
$Userinf = @()
While ($FirstDoc -ne $null)
{
$Voll = $FirstDoc.getItemValue("FullName")
$Voll = $Voll.Replace('CN=', '')
$Voll = $Voll.Replace('OU=', '')
$Voll = $Voll.Replace('O=', '')
$Split = $Voll.split("/")
[string]$OU = $Split[1]
$O = $Split[2]
[string]$Nachname = $FirstDoc.GetItemValue("LastName")
[string]$Vorname = $FirstDoc.GetItemValue("FirstName")
$Mail = $FirstDoc.GetItemValue("MailFile")
$Userinf += New-Object PSObject -Property @{Nachname=$Nachname;Vorname=$Vorname;OU=$OU}
Load-ListBox $listboxNotesBenutzer $Nachname -Append
$NextDoc = $DomView.GetNextDocument($FirstDoc)
$FirstDoc = $NextDoc
}
$listboxNotesBenutzer_SelectedIndexChanged={
Update-NavButtons
$txtNotesOU.Text = $Userinf[$listboxNotesBenutzer.SelectedIndex].OU
}