我通过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

答案 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()