Преобразовать DirectoryServices.ResultPropertyValueColleciton в Int с помощью Powershell

#powershell #active-directory #directoryservices

#powershell #active-directory #directoryservices

Вопрос:

Я хотел бы подсчитать количество входов в систему каждого пользователя и хотел бы показать все входы в систему. Я сделал это следующим образом

 $search = new-object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(objectClass=user)"
$result = $search.FindAll()

#amount of User in AD
Write-Host Amount of user:  $result.Count

#CountLogon
$logonCounter  = 0
foreach($person in $result){
$logonCounter  =  $person.properties.logoncount
}

Write-host Number of Logons: $logonCounter
  

Когда я запускаю этот скрипт, я получаю

Не удается преобразовать «Систему.cirerectoryservices.ResultPropertyValueCollection «значение типа «System.DirectoryServices.ResultPropertyValueCollection»ввести System.Int32»

Ответ №1:

Попробуйте это. Кстати, возможно, придется скорректировать значение $result.Значение размера страницы. В моих тестированиях это дало мне только первые 1000 объектов, поэтому измените его, чтобы обойти это ограничение. Чтобы получить общее количество входов в систему, передайте результаты Measure-Object командлета и укажите параметр -Sum :

 $logonCount = $result | foreach {  $_.properties.logoncount } | measure -sum
$logonCount.sum
  

Ответ №2:

Измените $logonCounter = $person.properties.logoncount на $logonCounter = ($person.properties.logoncount)[0] в вашем скрипте.

Ответ №3:

Вы можете попробовать это двойное приведение:

 $logonCounter  =  [int][string]$person.properties.logoncount