2017-06-21 40 views
0

我通過Powershell創建窗體窗體,用戶可以在其中搜索註冊到某個人的計算機,或搜索某個人的註冊計算機。註冊用戶存儲在description字段中,計算機名稱爲name字段。 $SearchIn保持對搜索的值,$field表示字段進行搜索。目錄搜索到數組以填充Windows窗體數據網格

我能得到我想要的結果通過控制檯,但我嘗試的結果推到一個Windows窗體上的數據網格視圖。下面腳本中的數據網格稱爲$dataGrid1。我在下面試圖將目錄服務搜索推送到一個數組,然後將datagrid數據源設置爲一個數組。我以爲因爲$objectComputer是一個對象而不是數組,我必須使用New-Object System.Collections.ArrayList創建一個數組,並使用addrange方法將其設置爲$objComputer對象。

最終,無論我嘗試的是什麼,我都會得到一個空白的datagrid視圖。有人能指引我朝着正確的方向嗎?

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

回答

0

UFF你的代碼是相當難讀,下一次請檢查括號{}

我想到底是不正確的:

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

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

我想它應該是這樣的:

# 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()