2017-06-21 3 views
0

Ich erstelle ein Windows-Formular über Powershell, wo Benutzer nach den Computern suchen können, die für eine Person registriert sind, oder nach den registrierten Computern einer Person suchen. Der registrierte Benutzer wird im Feld description, die Computernamen im Feld name gespeichert. $SearchIn hält den Wert zu suchen, $field das Feld in die Suche angibt.Verzeichnis Suche zu Array zum Auffüllen von Windows Form DataGrid

ich die Ergebnisse erhält, kann ich über die Konsole will, aber ich bin versucht, die Ergebnisse in eine Datagrid-Ansicht auf einem Windows-Formular zu drücken. Das Datagrid im folgenden Skript heißt $dataGrid1. Was ich unten habe, ist ein Versuch, die Verzeichnisdienstsuche auf ein Array zu schieben und dann die Datenressource-Datenquelle auf ein Array zu setzen. Ich dachte, weil das $objectComputer ein Objekt und nicht ein Array ist, musste ich ein Array mit New-Object System.Collections.ArrayList erstellen und es mit der addrange-Methode auf das $objComputer Objekt setzen ausfüllen.

Letztendlich was ich bekomme, egal was ich versuche, ist eine leere Datagrid-Ansicht. Kann mir jemand in die richtige Richtung zeigen?

Function Get-Info 
 
{ 
 
    param($SearchIn,$Field) 
 
    
 
    if ($field -eq "Name"){ 
 
     $filter="name=*$SearchIn*" 
 
     } 
 
    else 
 
     { 
 
     $filter="description=*$SearchIn*" 
 
     } 
 
    
 
    $strCategory = “computer” 
 
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry 
 
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
 
    $objSearcher.SearchRoot = $objDomain 
 
    $objSearcher.Filter = $filter 
 

 
    $colResults = $objSearcher.FindAll() 
 
    [email protected]() 
 

 
    foreach ($objResult in $colResults) 
 
     { 
 
     $objComputer+=($objResult.Properties.item("Name"), $objResult.Properties.item("Description"))} 
 
    $array=New-Object System.Collections.ArrayList($null) 
 
    $array=.addrange($objComputer) 
 
    
 
    $dataGrid1.DataSource = $array 
 
    $fComputerSearch.refresh() 
 
}#End Get-Info

Antwort

0

Uff ist der Code eher schwer zu lesen, beim nächsten Mal bitte die Klammern überprüfen {}

denke ich, das Ende ist falsch:

$array=New-Object System.Collections.ArrayList($null) 
    $array=.addrange($objComputer) 

    $dataGrid1.DataSource = $array 
    $fComputerSearch.refresh() 

Ich denke, Es sollte in etwa so aussehen:

# the fastest way to create empty ArrayList 
[System.Collections.ArrayList]$list = @() 
$list.AddRange($objComputer) 

$dataGridView = New-Object System.Windows.Forms.DataGridView -Property @{ 
    Size=New-Object System.Drawing.Size(1024,768) 
    ColumnHeadersVisible = $true 
    DataSource = $list 
} 

$form.Controls.Add($dataGridView) 
$form.ShowDialog() 
Verwandte Themen