用服务器填充Checkedlistbox

时间:2018-08-30 12:46:23

标签: powershell powershell-studio

我正在尝试用域中的服务器填充列表,但我获得了部分成功。我的列表中有5个项目,这与我拥有的服务器数量一样。

不幸的是,它们都被称为[Collection]

表单是使用Sapien Powershell Studio生成的

$strCategory = "computer"
$strOperatingSystem = "Windows*Server*"

$objDomain = New-Object System.DirectoryServices.DirectoryEntry

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain

$objSearcher.Filter = ("OperatingSystem=$strOperatingSystem")

$colProplist = "name"
foreach ($i in $colPropList) { $objSearcher.PropertiesToLoad.Add($i) }

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults)
{

    $objComputer = $objResult.Properties;
    $objComputer.name
    $checkedlistbox1.Items.add($objComputer.name)
}

我该怎么做才能在核对清单中显示正确的名字。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

来自DirectorySearcher.FindAll()方法的结果对象包含一个名为Properties的特殊属性,该属性返回类型化的集合,其中包含在AD中找到的对象的属性值。

这意味着您可以轻松完成

. . . 

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults) {
    $checkedlistbox1.Items.add($objResult.Properties['name'][0])
}

答案 1 :(得分:0)

我建议您改用Get-ADComputer获取服务器列表。

您只需循环访问列表,然后将服务器名添加到检查列表中

$Servers= Get-ADComputer -Filter {OperatingSystem -Like 'Windows *Server*'} #-Property * #the property flag is not needed if you just want the Name (see comment from Theo)
foreach ($srv in $Servers) {
    #Unmark to debug
    #$srv.Name
    #$srv.OperatingSystem   

    $checkedlistbox1.Items.add($srv.Name)
}