目录搜索到数组以填充Windows表单datagrid

时间:2017-06-21 20:25:12

标签: powershell

我通过Powershell创建一个Windows窗体,用户可以在其中搜索注册到某人的计算机,或搜索某个人的注册计算机。注册用户存储在description字段中,计算机名称存储在name字段中。 $SearchIn包含要搜索的值,$field表示要搜索的字段。

我可以通过控制台获得我想要的结果,但我试图将结果推送到Windows窗体上的数据网格视图中。以下脚本中的数据网格称为$dataGrid1。我下面的内容是尝试将目录服务搜索推送到数组,然后将datagrid数据源设置为数组。我想因为$objectComputer是一个对象而不是一个数组,我必须使用New-Object System.Collections.ArrayList创建一个数组,然后使用设置为addrange对象的$objComputer方法填充它。 / p>

最终,无论我尝试什么,我都会得到一个空白的数据网格视图。有人能指出我正确的方向吗?



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()
    $objComputer=@()

    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




1 个答案:

答案 0 :(得分:0)

您的代码难以阅读,下次请检查括号{}

我认为结局不正确:

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