При миграции SCCM одна из операций заключалась в переносе Boundary – сетей границ сайта. Сети описывались как IP Ranges. После переноса сетей и прочих настроек SCCM была включена публикация в лес. В результате в контейнере CN=System Management,CN=System должны были появится объекты вида SMS-<код сайта>-<число1>-<число2>, клиенты получить эту информацию, подключиться к сайту и т.д.
Но ничего подобного не произошло. Выяснилось, что при переносе границ в скрипте Powershell мой была допущена ошибка.
Если вы посмотрите командлеты Get/Set—CMBoundary, то увидите, что значение сети или диапазона записывается в атрибут Value. Оказалось, что при записи в этот атрибут системой не выполняется должным образом контроль значения. В результате вместо значения <начало сети>-<конец сети> я записал вместе с тире пару пробелов по обе стороны от него <начало сети><пробел>-<пробел><конец сети>. Получилось красиво… Командлет это проглотил, GUI отобразил значение правильно (!!!) – вот она засада!- но само ядро системы не стало обрабатывать такое значение и просто его игнорировало!
Так сетей и диапазонов было много, и глазами все проверить было сложно, то при поиске проблемы пригодился такой скрипт, который выводит список опубликованных в AD диапазонов сетей:
$sitecode=«S12121212«
$baseSMS = [ADSI]«LDAP://CN=System Management,CN=System,DC=domain,DC=ru»
$filter = «(&(objectClass=mSSMSRoamingBoundaryRange)(cn=SMS-$($sitecode)*))»
$findSMS = new-object System.DirectoryServices.DirectorySearcher($baseCTE, $filter)
$SMSRanges = $findSMS.findAll()
#$SMSRanges
$SMSRanges[0] | % {[pscustomobject]@{cn=$_.properties.cn[0]; `
mssmsrangediplow=[Net.IPAddress]([Net.IPAddress]::NetworkToHostOrder(([int64]$_.properties.mssmsrangediplow[0])*256*256*256*256)); `
mssmsrangediphigh=[Net.IPAddress]([Net.IPAddress]::NetworkToHostOrder(([int64]$_.properties.mssmsrangediphigh[0]*256*256*256*256)))}}
Filed under: Configuration Manager, Powershell | Tagged: ConfigMgr, Configuration Manager, Powershell | Leave a comment »