Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Присвоить каждому компьютеру инвентарный номер на основе сайта и порядка

Ответить
Настройки темы
PowerShell - [решено] Присвоить каждому компьютеру инвентарный номер на основе сайта и порядка

Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Есть множество сайтов: 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

Отправлено: 09:26, 28-08-2018

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-ADComputer -Filter "extensionAttribute1 -like '*'" -Properties extensionAttribute1,extensionAttribute2 | Group-Object extensionAttribute1 | Foreach {
	$ex2 = $_.Group | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach-Object {$_.extensionAttribute2}
	$start = 0
	$id = "$start".PadLeft(3,'0')
	$_.Group | Where {$_.extensionAttribute2 -notmatch "^\d{3}$"} | Foreach-Object {
		do {
		    $start++
		    $id = "$start".PadLeft(3,'0')
		} while($ex2 -contains $id)
		Set-ADComputer $_ -Replace @{extensionAttribute2=$id}
	}
}

Последний раз редактировалось Kazun, 28-08-2018 в 10:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:43, 28-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Сижу уже минут пять туплю в код, словно повершел впервой вижу

а что значит эта строка:

$ex2 = $_.Group | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach-Object {$_.extensionAttribute2}

Как оно потом заходит в while не могу понять

Отправлено: 10:11, 28-08-2018 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$ex2 = $_.Group | Where {$_.extensionAttribute2 -match "^\d{3}$"} | Foreach-Object {$_.extensionAttribute2}
  1. Where {$_.extensionAttribute2 -match "^\d{3}$"} - Только строки удовлетворяющие шаблону 000..999
  2. Foreach-Object {$_.extensionAttribute2} - получить значение атрибута extensionAttribute2
  3. $ex2 - содержит все текущие используемые значения extensionAttribute2 из сайта, в while идет проверка, есть значение в $ex2,уже используется, добавить единичку
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:18, 28-08-2018 | #4


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Оставил в выборке 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

Отправлено: 10:46, 28-08-2018 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


$_.Group | Foreach-Object заменить строку на :
Код: Выделить весь код
$_.Group | Where {$_.extensionAttribute2 -notmatch "^\d{3}$"} | Foreach-Object
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 28-08-2018 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Kazun, нумерация будет дублироваться

Отправлено: 11:13, 28-08-2018 | #7


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Спасибо, работает, это круто...

Отправлено: 11:15, 28-08-2018 | #8


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Kazun, Можешь помочь адаптировать этот скрипт чтобы он выполняясь на локальной машине выдавал свободный инвентарный номер основываясь на Атрибуте1(берется из переменной(ее получает другой скрипт)) и основываясь на уже имеющихся Атрибуте2 в AD

Например уже есть в AD компьютеры:
Код: Выделить весь код
Имя         Атрибут2 Атрибут1
SPB-COMP-003 002         SPB
SPB-COMP-004 003         SPB
SPB-COMP-005             SPB
MSK-COMP-006             MSK
SPB-COMP-007 007         SPB
SPB-COMP-008             SPB
SPB-COMP-010 009         SPB
Когда я выполняю скрипт на компьютере SPB-COMP-005, то скрипт возвращает значение 001
Когда я выполняю скрипт на компьютере MSK-COMP-006, то скрипт возвращает значение 001
Когда я выполняю скрипт на компьютере SPB-COMP-008, то скрипт возвращает значение 004

Это нужно для автоматизации получения имени компьютера перед вводом в домен

Отправлено: 10:08, 29-08-2018 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Заранее создать учетную запись компьютера с уже заданными Атрибут1 и Атрибут2, а не городить подобные решения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:22, 29-08-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Присвоить каждому компьютеру инвентарный номер на основе сайта и порядка

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2013 - Ссылка на ячейки другого листа, с возможностью изменения порядка ячеек btescm Microsoft Office (Word, Excel, Outlook и т.д.) 5 04-09-2014 23:16
http/web - [решено] присвоить каждому домену свою папку <Apache> morgan1991 Сетевые технологии 2 13-12-2010 15:18
7 / 2008 R2 - [решено] Присвоить имя компьютеру Hector Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 5 24-04-2010 01:51
Доступ - Много пользователей на компе (каждому своя папочка)? arsysha Microsoft Windows 2000/XP 8 09-09-2009 00:50




 
Переход