Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Powershell Out-Gridview bestimtme Column

Mitglied: LeeX01

LeeX01 (Level 1) - Jetzt verbinden

11.05.2019 um 16:26 Uhr, 403 Aufrufe, 14 Kommentare, 3 Danke

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
Mitglied: 139708
11.05.2019, aktualisiert um 16:37 Uhr
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
Bitte warten ..
Mitglied: LeeX01
11.05.2019 um 16:50 Uhr
Hi Wireguard,

sowas habe ich noch nicht gemacht, glaube auch da reichen meine Programmierkenntnisse nicht ganz.

Wie würde man das machen?

Beste Grüße
Bitte warten ..
Mitglied: 139708
11.05.2019, aktualisiert um 16:55 Uhr
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:
https://administrator.de/search/index.php?query=powershell+form+datagrid ...

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.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 11.05.2019, aktualisiert 18.05.2019
Servus @LeeX01 ,
Zitat von LeeX01:
Wie würde man das machen?
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 .
01.
function Out-GridViewCustom {
02.
param(
03.
    [parameter(mandatory=$false,ValueFromPipeline=$true)]$data,
04.
    [parameter(mandatory=$false)][string[]]$showColumns,
05.
    [parameter(mandatory=$false)][string]$title,
06.
    [parameter(mandatory=$false)][ValidateSet("Multiple","Single")]$OutputMode = "Multiple"
07.
)
08.
    begin{
09.
        
10.
        #region Import the Assemblies
11.
        [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
12.
        [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
13.
        #endregion
14.
        $script:selectedData = $null
15.
        $script:hiddenColumns = $null
16.
        $all = @()
17.
    }
18.
    process{
19.
        if ($data -ne $null){
20.
            $all += $data
21.
        }
22.
    }
23.

24.
    end{
25.
        $formMain = New-Object System.Windows.Forms.Form
26.
        $btnOK = New-Object System.Windows.Forms.Button
27.
        $dgv = New-Object System.Windows.Forms.DataGridView
28.
        $btnHiddenColumns = New-Object System.Windows.Forms.Button
29.
        $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
30.

31.
        #----------------------------------------------
32.
        # Event Script Blocks
33.
        #----------------------------------------------
34.
        $handler_btnOK_Click= 
35.
        {
36.
            if ($dgv.SelectedRows.Count -gt 0){
37.
                $script:selectedData = $dgv.SelectedRows.DataBoundItem
38.
            }
39.
            $formMain.Close()
40.
        }
41.

42.
        $handler_formMain_Load= 
43.
        {
44.
            if($title){
45.
                $formMain.Text = $title
46.
            }
47.
            if ($all.Count -eq 0){
48.
                $btnHiddenColumns.Enabled = $false
49.
                return
50.
            }
51.
            $arrList = New-Object System.Collections.ArrayList
52.
            $arrList.AddRange(@($all))
53.
            $dgv.DataSource = $arrList
54.

55.
            if ($showColumns.Count -gt 0){
56.
                $colIndex = 0
57.
                $cols = $all | gm -MemberType Properties| select -Expand Name
58.
                $showColumns | ?{$_ -in $cols} | %{
59.
                    $dgv.Columns[$_].DisplayIndex = $colIndex
60.
                    $colIndex++
61.
                }
62.
                
63.
                $script:hiddenColumns = $dgv.Columns.Name | ?{$_ -notin $showColumns} 
64.
                $script:hiddenColumns | %{$dgv.Columns[$_].Visible = $false}
65.
                if ($script:hiddenColumns.count -eq 0){
66.
                    $btnHiddenColumns.Enabled = $false
67.
                }
68.
            }else{
69.
                $btnHiddenColumns.Enabled = $false
70.
            }
71.
        }
72.
        $handler_btnHiddenColumns_Click= 
73.
        {
74.
            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){
75.
                $script:hiddenColumns | %{$dgv.Columns[$_].Visible = $true}
76.
                $btnHiddenColumns.Enabled = $false
77.
            }
78.
        }
79.
        $OnLoadForm_StateCorrection=
80.
        {#Correct the initial state of the form to prevent the .Net maximized form issue
81.
	        $formMain.WindowState = $InitialFormWindowState
82.
        }
83.

84.
        #----------------------------------------------
85.
        #region Generated Form Code
86.
        $System_Drawing_Size = New-Object System.Drawing.Size
87.
        $System_Drawing_Size.Height = 452
88.
        $System_Drawing_Size.Width = 632
89.
        $formMain.ClientSize = $System_Drawing_Size
90.
        $formMain.DataBindings.DefaultDataSourceUpdateMode = 0
91.
        $formMain.Name = "formMain"
92.
        $formMain.Text = "DataGrid"
93.
        $formMain.add_Load($handler_formMain_Load)
94.

95.
        $btnHiddenColumns.Anchor = 6
96.
        $btnHiddenColumns.DataBindings.DefaultDataSourceUpdateMode = 0
97.
        $System_Drawing_Point = New-Object System.Drawing.Point
98.
        $System_Drawing_Point.X = 12
99.
        $System_Drawing_Point.Y = 417
100.
        $btnHiddenColumns.Location = $System_Drawing_Point
101.
        $btnHiddenColumns.Name = "btnHiddenColumns"
102.
        $System_Drawing_Size = New-Object System.Drawing.Size
103.
        $System_Drawing_Size.Height = 23
104.
        $System_Drawing_Size.Width = 113
105.
        $btnHiddenColumns.Size = $System_Drawing_Size
106.
        $btnHiddenColumns.TabIndex = 2
107.
        $btnHiddenColumns.Text = "Spalten einblenden"
108.
        $btnHiddenColumns.UseVisualStyleBackColor = $True
109.
        $btnHiddenColumns.add_Click($handler_btnHiddenColumns_Click)
110.
        $formMain.Controls.Add($btnHiddenColumns)
111.

112.

113.
        $btnOK.Anchor = 10
114.
        $btnOK.DataBindings.DefaultDataSourceUpdateMode = 0
115.
        $System_Drawing_Point = New-Object System.Drawing.Point
116.
        $System_Drawing_Point.X = 545
117.
        $System_Drawing_Point.Y = 417
118.
        $btnOK.Location = $System_Drawing_Point
119.
        $btnOK.Name = "btnOK"
120.
        $System_Drawing_Size = New-Object System.Drawing.Size
121.
        $System_Drawing_Size.Height = 23
122.
        $System_Drawing_Size.Width = 75
123.
        $btnOK.Size = $System_Drawing_Size
124.
        $btnOK.TabIndex = 1
125.
        $btnOK.Text = "OK"
126.
        $btnOK.UseVisualStyleBackColor = $True
127.
        $btnOK.add_Click($handler_btnOK_Click)
128.
        $formMain.Controls.Add($btnOK)
129.

130.
        $dgv.Anchor = 15
131.
        $dgv.DataBindings.DefaultDataSourceUpdateMode = 0
132.
        $System_Drawing_Point = New-Object System.Drawing.Point
133.
        $System_Drawing_Point.X = 12
134.
        $System_Drawing_Point.Y = 12
135.
        $dgv.Location = $System_Drawing_Point
136.
        $dgv.Name = "dgv"
137.
        $System_Drawing_Size = New-Object System.Drawing.Size
138.
        $System_Drawing_Size.Height = 399
139.
        $System_Drawing_Size.Width = 608
140.
        $dgv.Size = $System_Drawing_Size
141.
        $dgv.TabIndex = 0
142.
        $dgv.SelectionMode = 1
143.
        $dgv.MultiSelect = $OutputMode -eq "Multiple"
144.
        $dgv.AllowUserToAddRows = $false
145.
        $dgv.AllowUserToResizeRows = $false
146.
        $dgv.AllowUserToDeleteRows = $false
147.
        $dgv.ReadOnly = $true
148.

149.
        $formMain.Controls.Add($dgv)
150.

151.
        #Save the initial state of the form
152.
        $InitialFormWindowState = $formMain.WindowState
153.
        #Init the OnLoad event to correct the initial state of the form
154.
        $formMain.add_Load($OnLoadForm_StateCorrection)
155.
        #Show the Form
156.
        $formMain.ShowDialog()| Out-Null
157.
        # return selected data
158.
        return $script:selectedData
159.
    }
160.
} #End Function
161.

162.
# testdaten erzeugen 
163.
$mydata = get-service
164.
# ... und mit custom gridview anzeigen lassen
165.
$mydata | Out-GridViewCustom -showColumns Status,Name,DisplayName -title "Das ist ein Titel"
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.
Bitte warten ..
Mitglied: LeeX01
13.05.2019 um 15:45 Uhr
Hi Uwe,

vielen Dank dafür, ich werde es ausprobieren.

Beste Grüße
Bitte warten ..
Mitglied: LeeX01
16.05.2019 um 18:30 Uhr
Hi Uwe,

habe deinen Code gerade getestet und eingebaut, funktioniert super.

Vielen Dank nochmal dafür!!!
Beste Grüße
Bitte warten ..
Mitglied: colinardo
16.05.2019, aktualisiert um 18:43 Uhr
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.
Bitte warten ..
Mitglied: LeeX01
18.05.2019 um 13:24 Uhr
Hallo Uwe,

vielleicht kannst du mir doch nochmal helfen? Ich habe gerade noch zwei Probleme mit dem CustomGrid.

Es wirft Fehlermeldungen wenn keine Daten übergeben werden und die Spalten werden nicht in der Reihenfolge angezeigt in der ich sie angegeben habe.

Meinst du das lässt sich einfach fixen?

Viele Grüße
Bitte warten ..
Mitglied: 139708
18.05.2019, aktualisiert um 14:54 Uhr
Zitat von LeeX01:
Es wirft Fehlermeldungen wenn keine Daten übergeben werden
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
Bitte warten ..
Mitglied: LeeX01
18.05.2019 um 15:01 Uhr
Zitat von 139708:

Zitat von LeeX01:
Es wirft Fehlermeldungen wenn keine Daten übergeben werden
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

Es könnte wie beim standardgrid einfach ein leeres Grid anzeigen. Das macht es auch aber zeigt eben die Fehlermeldung was unschön ist.
OK dann fang ich das vorher ab. muss ich mir nur überlegen wie ich das anzeige wenn das grid nicht gezeigt wird um ein Feedback zu geben.

viel störender ist aber das die Spalten nicht in der angebenen Reihenfolge stehen und die wichtigsten Spalten irgendwo mitten drin stehen.
Bitte warten ..
Mitglied: colinardo
18.05.2019, aktualisiert um 15:43 Uhr
Servus,
@139708 hat recht, das war so vorgesehen das die Funktion zwingend Daten anfordert, lässt sich aber problemlos anpassen. Hatte ja geschrieben das es nicht 1:1 das GridView abbildet .
Habe dir aber beide Wünsche oben eingebaut. Schönes Wochenende.

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
18.05.2019, aktualisiert um 16:00 Uhr
p.s. Hatte ich zwar schon erwähnt, hast du aber wohl übersehen:
Den Faux-Pas "bestimtme" im Titel bitte noch korrigieren, Merci.
Bitte warten ..
Mitglied: LeeX01
18.05.2019 um 16:29 Uhr
fast perfekt, merci!

Habe den Code noch ergänzt im OK Button Click event, da sonst bei leerem Grid oder keiner Auswahl der Fehler
"Die Eigenschaft "DataBoundItem" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist."
geworfen wird. Falls das mal noch wer benutzen will.

if($dgv.SelectedRows.Count -gt 0){$script:selectedData = $dgv.SelectedRows.DataBoundItem}
Bitte warten ..
Mitglied: colinardo
18.05.2019, aktualisiert um 18:31 Uhr
Ja, die Zeile war beim Update abhanden gekommen, ist ergänzt.

Die Benachrichtigungsmails hier scheinen momentan nicht richtig zu funktionieren, deswegen etwas verzögerte Antworten.
Bitte warten ..
Ähnliche Inhalte
Windows 8

Powershell out-gridview ausgabe sofort beendet

gelöst Frage von ChontaWindows 818 Kommentare

Hallo, ich habe das Problem das sowas wie Get-Process Der befehl wird ausgeführt, das Fenster vom out-gridview wird kurz ...

Batch & Shell

Powershell Button in Column im Datagridview deaktivieren

gelöst Frage von H41mSh1C0RBatch & Shell2 Kommentare

Hi@All, ich bekomme mein DatagridView nun ordentlich gefüllt. Die Events werden auch korrekt ausgeführt. Jetzt fehlt mit noch das ...

LAN, WAN, Wireless

Ping in-out vs. out-in

Frage von bonitoLAN, WAN, Wireless25 Kommentare

Hallo Leute, ich habe eine Frage zu Pingzeiten. Wenn ich aus meinem LAN über meinen Router eine Adresse im ...

Datenbanken

Select column by id ORALCE SQL

gelöst Frage von 94451Datenbanken2 Kommentare

Hallo Liebe Leut, gibt es die Möglichkeit eine Column anhand einer ID zu selekiteren? wenn ich einen Abruf mache ...

Neue Wissensbeiträge
Outlook & Mail

Outlook 2016 stürzt ab, wenn man ein (at)- Zeichen im Text einer neuen E-Mail schreibt

Tipp von Enriqe vor 8 StundenOutlook & Mail4 Kommentare

Bei uns in der Firma häuften sich die Fälle, bei denen sich Outlook kommentarlos verabschiedet, wenn man ein - ...

Google Android

Google sperrt Android-Updates und den Play Store für Huawei

Information von Deepsys vor 1 TagGoogle Android8 Kommentare

Das finde ich schon ein starkes Stück, Trump der Welt Diktator. So kann man mit einem Dekret mal eben ...

Windows 7

Südkoreas Regierung setzt auf Linux, um Windows 7 Clients abzulösen

Information von kgborn vor 1 TagWindows 74 Kommentare

Kleiner Infosplitter zum Wochenanfang: Während München (LiMux) und die niedersächsische Finanzverwaltung von Linux auf einen Windows 10-Client (und Office) ...

Internet
Big Brother is Watching You
Information von transocean vor 2 TagenInternet1 Kommentar

Moin, die Datenkrake Google fischt Informationen über Einkäufe ab, die GMail Nutzer im Netz tätigen. Gruß Uwe

Heiß diskutierte Inhalte
Windows Server
Passwortänderung an RODC möglich?
Frage von DexthaWindows Server23 Kommentare

Hallo, ich habe einen RODC, auf welchen ich über ldaps (Web-Seite mit php7) Passwortänderungen durchführen möchte. Ist das grundsätzlich ...

Windows 10
Windows am MAC
Frage von LeeX01Windows 1018 Kommentare

Guten Abend zusammen, ich habe gerade ein Macbook Pro vor mir welches ich mit einem Windows 10 to go ...

Windows Server
RDP als Citrix Alternative
gelöst Frage von samreinWindows Server15 Kommentare

Hallo zusammen, ich bin neu hier und das ist mein erster Beitrag. Ich bin Einzeladmin und wir setzen bei ...

Batch & Shell
Powershell Datum der zuletzt eingespielten Patche bei remote Servern ermitteln
Frage von bensonhedgesBatch & Shell14 Kommentare

Hallo, ich möchte gerne anhand einer Serverliste (bsp. computers.txt) via PS ermitteln, wann derjeweilige Server zuletzt gepatcht wurde (Liste ...