Преобразуйте DirectoryServices.ResultPropertyValueColleciton в Int с помощью Powershell - PullRequest
0 голосов
/ 14 ноября 2011

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

$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

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

Невозможно преобразовать Значение типа "System.CirectoryServices.ResultPropertyValueCollection" «System.DirectoryServices.ResultPropertyValueCollection» для ввода System.Int32"

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

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

1 голос
/ 14 ноября 2011

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

$logonCount = $result | foreach {  $_.properties.logoncount } | measure -sum
$logonCount.sum
0 голосов
/ 14 ноября 2011

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

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