Заполните 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)
}