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

Компьютерный форум 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

 

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


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

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


Kazun, Так мы же про автоматизацию, имена компьютеров сложные и содержат инфу из компьютера, там серийники, типы итп, чтобы ручками ничего не нужно было делать, помоги пожалуйста...

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



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

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


Ветеран


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

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


Т.к. локальный комптьютер не в домене, то требуется указать $DomainDN,$Site для которого осуществляется поиск и учетную запись,которая имееет доступ к Active Directory.

Код: Выделить весь код
# Атрибуте1(берется из переменной(ее получает другой скрипт)) 
$site = "...."

#Учетные данные для подключения к Active Directory
$Credential = New-Object System.Management.Automation.PSCredential('UserName', (ConvertTo-SecureString 'Password' -Force -AsPlainText))

# Создаем ADSI Search    
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.PropertiesToLoad.Add('extensionAttribute2')
# Только данные из текущего сайта
$Searcher.Filter = "(extensionAttribute1=$site)"

# Домен для подключения
$DomainDN = "LDAP://corp.contoso.com/DC=corp,DC=contoso,DC=ru"

# Подключение
$Domain = New-Object System.DirectoryServices.DirectoryEntry($DomainDN ,$Credential.UserName,$Credential.GetNetworkCredential().Password)

# Устанавливаем текущие данные подключения
$Searcher.SearchRoot = $Domain

# Делаем поиск
$All = $Searcher.FindAll()
$ex2 = $All | Where {$_.Properties["extensionAttribute2"][0] -match "^\d{3}$"} | Foreach {$_.Properties["extensionAttribute2"][0]} 

# Получаем свободный ID
$Start = 0
do {
	$Start++
	$FreeId = "$Start".PadLeft(3,'0')
} while($ex2 -contains $FreeId)

$FreeID

Последний раз редактировалось Kazun, 29-08-2018 в 11:45. Причина: ()


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


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


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

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


Вываливает такое:

Код: Выделить весь код
строка:12 знак:67
+ $Searcher = New-Object System.DirectoryServices.DirectorySearcher()
+                                                                   ~
После ''('' ожидалось выражение.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedExpression

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


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


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

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


Изображения
Тип файла: png cred.PNG
(23.4 Kb, 5 просмотров)

Так ведь будет работать?:
$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

Отправлено: 12:51, 29-08-2018 | #14


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


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

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


Разобрался со всем, осталось только строку:

Код: Выделить весь код
Set-ADComputer $env:computername -Replace @{extensionAttribute2=$id}
Перевести в ADSI запрос

(это нужно чтобы при создании компьютера в AD скрипт сразу добавлял себе в св-ва информацию о себе)

Help?)

Отправлено: 17:25, 10-09-2018 | #15



Компьютерный форум 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




 
Переход