Полезные советы для владельцев Active Directory №2

Текст: 

Как было отмечено ранее в № 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}
}

продолжение следует

Добавить комментарий.

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.