Присвоить каждому компьютеру инвентарный номер на основе сайта и порядка
Есть множество сайтов: MSK, SPB, NSK (около 20)
На каждом сайте есть около сотни компьютеров в AD Необходимо каждому компьютеру присвоить инвентарный номер формата: (001,002,003...), при этом на каждом сайте номера начинаются заново с 001 У каждого компьютера есть свойство в AD - @{extensionAttribute1 = MSK}(или spb или nsk) а @{extensionAttribute2 = 001} Нужно, чтобы скрипт каждому компьютеру выдал порядковый номер на основании атрибута1 и самое сложное: если компьютер в атрибуте2 уже содержит порядковый номер то он не выдавал этот номер другому компьютеру Например: Имя Атрибут1 Атрибут2 Comp1, MSK, ea2=004 Comp2, MSK, ea2=<пусто> Comp3, MSK, ea2=001 Comp4, MSK, ea2=<Непонятная строка> Comp5, SPB, ea2=<пусто> Comp6, SPB, ea2=001 ... После прохождения скрипта: Имя Атрибут1 Атрибут2 Comp1, MSK, ea2=004 Comp2, MSK, ea2=002 Comp3, MSK, ea2=001 Comp4, MSK, ea2=003 Comp5, SPB, ea2=002 Comp6, SPB, ea2=001 |
Код:
Get-ADComputer -Filter "extensionAttribute1 -like '*'" -Properties extensionAttribute1,extensionAttribute2 | Group-Object extensionAttribute1 | Foreach { |
Сижу уже минут пять туплю в код, словно повершел впервой вижу
а что значит эта строка: $ex2 = $_.Group | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach-Object {$_.extensionAttribute2} Как оно потом заходит в while не могу понять |
Код:
$ex2 = $_.Group | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach-Object {$_.extensionAttribute2}
|
Оставил в выборке 7 тестовых компьютеров,
в результате скрипт перезаписывает атрибуты поверх уже имеющихся, нужно чтобы он не менял те что есть Первый атрибут везде SPB было name attrib2 SPB-COMP-003 <не задано> SPB-COMP-004 <не задано> SPB-COMP-005 <не задано> SPB-COMP-006 005 SPB-COMP-007 001 SPB-COMP-008 <не задано> SPB-COMP-010 <не задано> Первый запуск: SPB-COMP-003 002 SPB-COMP-004 003 SPB-COMP-005 004 SPB-COMP-006 006 SPB-COMP-007 007 SPB-COMP-008 008 SPB-COMP-010 009 На второе выполнение: SPB-COMP-003 001 SPB-COMP-004 005 SPB-COMP-005 010 SPB-COMP-006 011 SPB-COMP-007 012 SPB-COMP-008 013 SPB-COMP-010 014 Третье SPB-COMP-003 002 SPB-COMP-004 003 SPB-COMP-005 004 SPB-COMP-006 006 SPB-COMP-007 007 SPB-COMP-008 008 SPB-COMP-010 009 |
$_.Group | Foreach-Object заменить строку на :
Код:
$_.Group | Where {$_.extensionAttribute2 -notmatch "^\d{3}$"} | Foreach-Object |
Kazun, нумерация будет дублироваться
|
Спасибо, работает, это круто...
|
Kazun, Можешь помочь адаптировать этот скрипт чтобы он выполняясь на локальной машине выдавал свободный инвентарный номер основываясь на Атрибуте1(берется из переменной(ее получает другой скрипт)) и основываясь на уже имеющихся Атрибуте2 в AD
Например уже есть в AD компьютеры: Код:
Имя Атрибут2 Атрибут1 Когда я выполняю скрипт на компьютере MSK-COMP-006, то скрипт возвращает значение 001 Когда я выполняю скрипт на компьютере SPB-COMP-008, то скрипт возвращает значение 004 Это нужно для автоматизации получения имени компьютера перед вводом в домен |
Заранее создать учетную запись компьютера с уже заданными Атрибут1 и Атрибут2, а не городить подобные решения.
|
Kazun, Так мы же про автоматизацию, имена компьютеров сложные и содержат инфу из компьютера, там серийники, типы итп, чтобы ручками ничего не нужно было делать, помоги пожалуйста...
|
Т.к. локальный комптьютер не в домене, то требуется указать $DomainDN,$Site для которого осуществляется поиск и учетную запись,которая имееет доступ к Active Directory.
Код:
# Атрибуте1(берется из переменной(ее получает другой скрипт)) |
Вываливает такое:
Код:
строка:12 знак:67 |
Вложений: 1
Так ведь будет работать?:
$site = "SPB" $server = "dc1" а учетные данные подтягиваются из unattened файла $All = Get-ADComputer -Filter * -Properties extensionAttribute1,extensionAttribute2 -server $server | where {$_.extensionAttribute1 -eq $site} # Делаем поиск #$All = $Searcher.FindAll() $ex2 = $All | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach {$_.extensionAttribute2} # Получаем свободный ID $Start = 0 do { $Start++ $FreeId = "$Start".PadLeft(3,'0') } while($ex2 -contains $FreeId) $FreeID |
Разобрался со всем, осталось только строку:
Код:
Set-ADComputer $env:computername -Replace @{extensionAttribute2=$id} (это нужно чтобы при создании компьютера в AD скрипт сразу добавлял себе в св-ва информацию о себе) Help?) |
Время: 10:21. |
Время: 10:21.
© OSzone.net 2001-