Заполните Checkedlistbox серверами

Я пытаюсь заполнить список серверами в моем домене, и у меня есть частичный успех. В моем списке 5 вещей, столько же серверов, сколько и у меня.

К сожалению, все они просто называются [Коллекция]

Форма генерируется с помощью 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 ответа

Решение

Объект результата из DirectorySearcher.FindAll() Метод содержит специальное свойство с именем Properties который возвращает типизированную коллекцию, содержащую значения свойств объекта, найденного в AD.

Это означает, что вы можете просто сделать

. . . 

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults) {
    $checkedlistbox1.Items.add($objResult.Properties['name'][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)
}
Другие вопросы по тегам