Текст:
Как было отмечено ранее в № 1, в AD можно и нужно хранить данные о компьютерах, пользователях и организации вцелом.
Одной из часто встречающихся задач является определение физического местоположения рабочей станции. Для этого предназначен скрипт №2, запускается через планировщик на выделенном сервере.
Скрипт считывает IP адрес рабочей станции из AD, по справочнику подсетей соотносит его местоположению и заполняет соответствующие атрибуты AD для учетной записи компьютера.
Справочник подсетей имеет следующий формат:
network;mask;addr1;addr2;idad
192.168.1.0;255.255.255.248;"г. Симферополь";"ул. Героев Сталинграда 1";"00243"
первый параметр - подсеть, второй - маска подсети, третий и четвертый - местоположение, пятый - идентификатор для связи данного местоположения с другим ПО
#загружаем справочник подсетей
$subnets = @(Import-Csv -Delimiter ';' -Encoding utf8 -Path subnets.csv)
#получаем список рабочих станций из интересующей нас OU в AD с допустимыми значениями атрибута IPv4Address, в моем случае содержимое атрибута начинается на 192
$pc = @(Get-ADComputer -SearchBase 'OU=WorkStations,DC=crimea,DC=test,DC=ru' -Filter {enabled -eq $true} -Properties Location,IPv4Address,Description,whenChanged,OperatingSystem | ? {$_.IPv4Address -match "^192"})
#проходим по очереди все полученные учетные записи рабочих станций
$pc|%{
#ищем IP в справочнике подсетей, принцип сравнения пооктетный: результат бинарной операции AND для октета IP адреса и октета маски должен быть равен соответствующему октету подсети, если условие выполняется для всех октетов, то IP входит в данную подсеть
$found=-1
[int[]]$ip=$_.ipv4address.split('.')
for($i=0;$i -lt $subnets.count;$i++){
[int[]]$net=$subnets[$i].network.split('.')
[int[]]$mask=$subnets[$i].mask.split('.')
$j=-1
do{$j++}while(($ip[$j] -band $mask[$j]) -eq $net[$j])
if($j -ge 4){$found=$i;break}
}
# если найдено соответствие IP адресу в справочнике подсетей записываем атрибуты в AD
if($found -ge 0){Set-ADComputer -Identity $_.Name -Location $subnets[$found].addr1+", "+$subnets[$found].addr2}
}
Добавить комментарий.