Powershell Out-Gridview bestimtme Column
Hallo,
ich finde leider nichts brauchbares in der MS Doku. Ich habe ein Object mit vielen Properties und möchte die an Out-Gridview weitergeben. Die meisten Spalten werden jedoch meistens nicht gebraucht und sollen ausgeblendet sein. Ich habe noch keine Möglichkiet gefunden das zu realisieren. Wenn ich über Selct * alles an das Gridview weitergebe werden mir auch alle Spalten angezeigt was sehr unübersichtlich ist. Dann müsste ich die anderen Spalten jedesmal per Hand ausblenden. Wenn ich über Select -property nur die wichtigsten properties weitergebe stimmt die Anzeige zwar, aber natürlich fehlen die anderen Spalten dann und lassen sich auch nicht nachträglich einblenden.
Hat das schon mal jemand lösen können?
Vielen Dank im Voraus
ich finde leider nichts brauchbares in der MS Doku. Ich habe ein Object mit vielen Properties und möchte die an Out-Gridview weitergeben. Die meisten Spalten werden jedoch meistens nicht gebraucht und sollen ausgeblendet sein. Ich habe noch keine Möglichkiet gefunden das zu realisieren. Wenn ich über Selct * alles an das Gridview weitergebe werden mir auch alle Spalten angezeigt was sehr unübersichtlich ist. Dann müsste ich die anderen Spalten jedesmal per Hand ausblenden. Wenn ich über Select -property nur die wichtigsten properties weitergebe stimmt die Anzeige zwar, aber natürlich fehlen die anderen Spalten dann und lassen sich auch nicht nachträglich einblenden.
Hat das schon mal jemand lösen können?
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 450420
Url: https://administrator.de/contentid/450420
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
14 Kommentare
Neuester Kommentar
Moin.
Da wirst du dir eine eigene Powershell-WinForm oder WPF mit einem DataGridView bauen müssen. Out-Gridview unterstützt eben nur die Objekte die du ihm auch übergibst, Optionen zum initialen ausblenden hat es nicht.
Gruß wireguard
Da wirst du dir eine eigene Powershell-WinForm oder WPF mit einem DataGridView bauen müssen. Out-Gridview unterstützt eben nur die Objekte die du ihm auch übergibst, Optionen zum initialen ausblenden hat es nicht.
Gruß wireguard
Das baut dir jeder x beliebige Powershell Forms Editor zusammen
Beispiel wie man ein DataGridView einsetzt gibt es hier viele im Forum schau sie dir einfach mal an:
Am einfachsten lernt man das wenn man mal mit Visual Studio eine Form zusammengebaut hat, die Properties und Ereignisse sind nämlich die selben wie in Powershell, da beide die selben Objekte nutzen.
Beispiel wie man ein DataGridView einsetzt gibt es hier viele im Forum schau sie dir einfach mal an:
Am einfachsten lernt man das wenn man mal mit Visual Studio eine Form zusammengebaut hat, die Properties und Ereignisse sind nämlich die selben wie in Powershell, da beide die selben Objekte nutzen.
Servus @LeeX01 ,
z.B. so (schnell mal zusammen gescriptet)
Hat auf die Schnelle natürlich keine Ansprüche auf Vollständigkeit, soll dir nur verdeutlichen was du alles mit den Forms machen kannst. Du kannst es ja als Basis-Gerüst für deine eigenen Anpassungen hernehmen und z.B. selbst das einzelne Ein- und Ausblenden der Spalten einbauen, den Spaß wollte ich dir jetzt nicht auch noch nehmen .
Als Beispieldaten dienen hier die Dienste. Es können aber alle anderen Custom-Object(Arrays) als Datenquelle dienen.
Viel Spaß.
Grüße Uwe
p.s. Den Faux-Pas im Titel bitte noch korrigieren, Merci.
z.B. so (schnell mal zusammen gescriptet)
Hat auf die Schnelle natürlich keine Ansprüche auf Vollständigkeit, soll dir nur verdeutlichen was du alles mit den Forms machen kannst. Du kannst es ja als Basis-Gerüst für deine eigenen Anpassungen hernehmen und z.B. selbst das einzelne Ein- und Ausblenden der Spalten einbauen, den Spaß wollte ich dir jetzt nicht auch noch nehmen .
function Out-GridViewCustom {
param(
[parameter(mandatory=$false,ValueFromPipeline=$true)]$data,
[parameter(mandatory=$false)][string[]]$showColumns,
[parameter(mandatory=$false)][string]$title,
[parameter(mandatory=$false)][ValidateSet("Multiple","Single")]$OutputMode = "Multiple"
)
begin{
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
$script:selectedData = $null
$script:hiddenColumns = $null
$all = @()
}
process{
if ($data -ne $null){
$all += $data
}
}
end{
$formMain = New-Object System.Windows.Forms.Form
$btnOK = New-Object System.Windows.Forms.Button
$dgv = New-Object System.Windows.Forms.DataGridView
$btnHiddenColumns = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#----------------------------------------------
# Event Script Blocks
#----------------------------------------------
$handler_btnOK_Click=
{
if ($dgv.SelectedRows.Count -gt 0){
$script:selectedData = $dgv.SelectedRows.DataBoundItem
}
$formMain.Close()
}
$handler_formMain_Load=
{
if($title){
$formMain.Text = $title
}
if ($all.Count -eq 0){
$btnHiddenColumns.Enabled = $false
return
}
$arrList = New-Object System.Collections.ArrayList
$arrList.AddRange(@($all))
$dgv.DataSource = $arrList
if ($showColumns.Count -gt 0){
$colIndex = 0
$cols = $all | gm -MemberType Properties| select -Expand Name
$showColumns | ?{$_ -in $cols} | %{
$dgv.Columns[$_].DisplayIndex = $colIndex
$colIndex++
}
$script:hiddenColumns = $dgv.Columns.Name | ?{$_ -notin $showColumns}
$script:hiddenColumns | %{$dgv.Columns[$_].Visible = $false}
if ($script:hiddenColumns.count -eq 0){
$btnHiddenColumns.Enabled = $false
}
}else{
$btnHiddenColumns.Enabled = $false
}
}
$handler_btnHiddenColumns_Click=
{
if ([System.Windows.Forms.MessageBox]::Show("Folgende Spalten sind ausgeblendet:`n`n- $($script:hiddenColumns -join "`n- ")`n`nMöchten Sie sie jetzt einblenden?","Spalten einblenden",4,32) -eq 6){
$script:hiddenColumns | %{$dgv.Columns[$_].Visible = $true}
$btnHiddenColumns.Enabled = $false
}
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$formMain.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 452
$System_Drawing_Size.Width = 632
$formMain.ClientSize = $System_Drawing_Size
$formMain.DataBindings.DefaultDataSourceUpdateMode = 0
$formMain.Name = "formMain"
$formMain.Text = "DataGrid"
$formMain.add_Load($handler_formMain_Load)
$btnHiddenColumns.Anchor = 6
$btnHiddenColumns.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 417
$btnHiddenColumns.Location = $System_Drawing_Point
$btnHiddenColumns.Name = "btnHiddenColumns"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 113
$btnHiddenColumns.Size = $System_Drawing_Size
$btnHiddenColumns.TabIndex = 2
$btnHiddenColumns.Text = "Spalten einblenden"
$btnHiddenColumns.UseVisualStyleBackColor = $True
$btnHiddenColumns.add_Click($handler_btnHiddenColumns_Click)
$formMain.Controls.Add($btnHiddenColumns)
$btnOK.Anchor = 10
$btnOK.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 545
$System_Drawing_Point.Y = 417
$btnOK.Location = $System_Drawing_Point
$btnOK.Name = "btnOK"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnOK.Size = $System_Drawing_Size
$btnOK.TabIndex = 1
$btnOK.Text = "OK"
$btnOK.UseVisualStyleBackColor = $True
$btnOK.add_Click($handler_btnOK_Click)
$formMain.Controls.Add($btnOK)
$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 = 399
$System_Drawing_Size.Width = 608
$dgv.Size = $System_Drawing_Size
$dgv.TabIndex = 0
$dgv.SelectionMode = 1
$dgv.MultiSelect = $OutputMode -eq "Multiple"
$dgv.AllowUserToAddRows = $false
$dgv.AllowUserToResizeRows = $false
$dgv.AllowUserToDeleteRows = $false
$dgv.ReadOnly = $true
$formMain.Controls.Add($dgv)
#Save the initial state of the form
$InitialFormWindowState = $formMain.WindowState
#Init the OnLoad event to correct the initial state of the form
$formMain.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$formMain.ShowDialog()| Out-Null
# return selected data
return $script:selectedData
}
} #End Function
# testdaten erzeugen
$mydata = get-service
# ... und mit custom gridview anzeigen lassen
$mydata | Out-GridViewCustom -showColumns Status,Name,DisplayName -title "Das ist ein Titel"
Viel Spaß.
Grüße Uwe
p.s. Den Faux-Pas im Titel bitte noch korrigieren, Merci.
Keine Ursache, freut mich wenn's hilft.
Schönen Abend.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Schönen Abend.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Wundert nicht denn das validiert doch die Funktion mit
[ValidateNotNullOrEmpty()]
ist also kein Fehler ansich, der Fehler ist das du keine Daten anlieferst was soll dir Form also darstellen?! Unsichtbare Geister
[ValidateNotNullOrEmpty()]
ist also kein Fehler ansich, der Fehler ist das du keine Daten anlieferst was soll dir Form also darstellen?! Unsichtbare Geister