Просто ищем количество OU, вложенных в другие OU.Я использую область действия «OneLevel», которая должна давать мне любые объекты OU непосредственно под родителем, но не сам родитель.
Пример (получение всего поддерева, включая родителя):
PS C:\> $OUCountSubtree = Get-ADOrganizationalUnit -Filter * -SearchScope Subtree -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there'
PS C:\> $OUCountSubtree.Name
PS C:\> MySubOU
PS C:\> MyParentOU
PS C:\> $OUCountSubtree.Count
PS C:\> 2
Так что это прекрасно работает.Однако, когда я пытаюсь вернуть количество обнаруженных объектов или пытаюсь выполнить любые целочисленные операции с полученными числами, он выдает ошибку, если число равно 1. Когда оно равно 0 или 2+, это работает.Кроме того, когда я отображаю полные результаты (а не только счетчик), все выглядит нормально.
Пример (извлечение только дочерних OU):
PS C:\> $OUCountOneLevel = Get-ADOrganizationalUnit -Filter * -SearchScope OneLevel -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there'
PS C:\> $OUCountOneLevel.Name
PS C:\> MySubOU
PS C:\> $OUCountOneLevel.Count
PS C:\>
Проверка работоспособности
PS C:\> $OUCountOneLevel
City :
Count : {}
Country :
DistinguishedName : OU=MySubOU,OU=MyParentOU,DC=USA,DC=hello,DC=there
LinkedGroupPolicyObjects : {}
ManagedBy :
Name : MySubOU
ObjectClass : organizationalUnit
ObjectGUID : [some guid]
PostalCode :
State :
StreetAddress :
Итак, возвращена одна OU.И все же ...
PS C:\> $OUCountOneLevel.Count -eq 0
PS C:\> False
PS C:\> $OUCountOneLevel.Count -eq $null
PS C:\> False
PS C:\> $OUCountOneLevel.Count -eq ''
PS C:\> False
PS C:\> 5 + $OUCountOneLevel.Count
PS C:\> Method invocation failed because [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] does not contain a method named 'op_Addition'.
Я делал подобные вещи годами, и я не помню, чтобы когда-либо видел такое поведение раньше.Почему бы не вернуть целое число 1?Я не объявлял массив или что-либо кроме простого запроса к AD.