powershell-logo

PowerShell: назначение Dial-in IP адреса пользователям Active Directory

Назначение статического IP адреса пользователя Active Directory на вкладке Dial-in может быть крайне утомительной процедурой, если вам необходимо внести несколько сотен IP адресов. В данной статье я опишу процесс автоматизации этой процедуры с помощью PowerShell.

Процесс ручного назначения IP адреса выглядит следующим образом:
adds-dial-in-static-address-01
Указанный IP адрес записывается в атрибуты msRADIUSFramedIPAddress и msRASSavedFramedIPAddress:
adds-dial-in-static-address-02
Значение в атрибутах представляет собой целочисленную интерпритацию 32 битного бинарного IP адреса длиной в 4 байта.
172.20.224.10 = 10101100.00010100.11100000.00001010 удаляем точки и получаем 10101100000101001110000000001010 = 2887049226 (DEC) возьмём 4 байта — получим -1407918070:
adds-dial-in-static-address-03
Callum0x50 в своей статье написал функцию PowerShell для преобразования IP адреса в нужное нам значение:

function Convert-IP {
 param(
 [Parameter(ValueFromPipeline=$true)]
 [String]$IPAddress = "127.0.0.1"
 )
 
 $octetsDecimal = $IPAddress -split "\."
 $octetsBinary = $octetsDecimal | % { [convert]::ToString($_, 2) }
 
$octetsBinary = $octetsBinary | % { ("0" * (8 - $_.length)) + $_ }
 
$octetsBinary | % { $binaryIP += $_ }
 $integerIP = [convert]::ToInt32($binaryIP, 2)
 
 return $integerIP
}

Я воспользуюсь этой функцией, чтобы автоматизировать процесс назначения адресов.

Модифицировать атрибуты msRADIUSFramedIPAddress и msRASSavedFramedIPAddress мы будем с помощью командлета Set-ADUser. Для того, чтобы назначить IP адрес пользователю необходимо записать полученное через функцию выше значение в атрибуты:

Set-ADUser -Identity UserName -replace @{msRADIUSFramedIPAddress=-1407918069;msRASSavedFramedIPAddress=-1407918069}

Параметр -Replace я использую для того, чтобы заменить IP адрес новым значением, если он был задан ранее.

Для автоматизации процесса подготовим CSV файл следующего вида:

SamAccountName,IP
User1,172.20.224.2
User2,172.20.224.3
User3,172.20.224.4
User4,172.20.224.5

Сценарий с использованием функции конвертации IP адреса я сделал таким:

function Convert-IP {
 param(
 [Parameter(ValueFromPipeline=$true)]
 [String]$IPAddress = "127.0.0.1"
 )
 
 $octetsDecimal = $IPAddress -split "\."
 $octetsBinary = $octetsDecimal | % { [convert]::ToString($_, 2) }
 
$octetsBinary = $octetsBinary | % { ("0" * (8 - $_.length)) + $_ }
 
$octetsBinary | % { $binaryIP += $_ }
 $integerIP = [convert]::ToInt32($binaryIP, 2)
 
 return $integerIP
}

Import-Csv 'C:\Scripts\usersip.csv' | ForEach-Object {Set-ADUser -Identity $_.SamAccountName -add @{msRADIUSFramedIPAddress=Convert-IP $_.IP;msRASSavedFramedIPAddress=Convert-IP $_.IP}}

Если запуск производится в версиях PowerShell ниже 3, то нужно добавить команду импорта модуля Active Directory.

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