Изменения разрешения на вход пользователей во всем домене
16 Сентябрь 2009
Был у нас когда-то совсем давно сервер с именем MAAT и с ролью web сервера. Время шло и мы его убили. В место него появились два сервера IIS-01 и IIS-02 с теми же ролями. Так же для пользователей, которые используют особо важные программы отдела АСУ был ограничен вход на компьютеры. Ну и как говорится началась глупая работа по замене старого сервера на новые. После третьего звонка я не выдержал и набросал вот такой скрипт. Который ищет в домене пользователей у которых в свойстве userWorkstations есть компьютер MAAT и заменяет его на нужные значения.
#Requires -Version 2.0
#Requires -PSSnapin Quest.ActiveRoles.ADManagement
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2009.09.16
# Description: Скрипт ищет всех пользователей с определенным компьютером в свойстве
# userworkstations и заменяет их нужными именами компьютеров
#########################################################################################
Function Search-MAAT ($listcomputers) {
#--- создаем пустой масив
$mass = New-Object System.Collections.ArrayList
#--- заполняем массив
Foreach ($i in $listcomputers -split ',') { $mass.Add($i) | Out-Null }
$i = 0
While ($i -ne $mass.Count+1) {
#--- ищем совпадения и устанвливаем флаг
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-01') `
-and ($listcomputers -match 'IIS-02')) {
#--- тут флага нету, так как мы сразу удаяем не нежный элемент массива
$mass.Removeat($i)
}
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-01')) {
$check = 'iis-02'
}
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-02')) {
$check = 'iis-01'
}
if (($mass[$i] -match 'maat') -and ($listcomputers -notmatch 'IIS-01') `
-and ($listcomputers -notmatch 'IIS-02')) {
$check = 'all'
}
#--- обрабатываемт полученные флаги
switch ($check) {
'all' { $mass[$i] = 'IIS-01,IIS-02' }
'iis-01' { $mass[$i] = 'IIS-01' }
'iis-02' { $mass[$i] = 'IIS-02' }
default { }
}
#--- удаляем при каждом прохоте на всякий случай переменную с флагом
if($check) {Remove-Variable check}
$i++
}
#--- собираем массив в строку с разделителем ','
$mass -join ','
}
$root = 'DC=isea,DC=ru'
Foreach ($user in Get-QADUser * -IncludedProperties 'userWorkstations' -SizeLimit 0 -SearchRoot $root) {
if ( $user.userWorkstations -match 'maat' ) {
Write-Host "Работы проводится над следующим пользователем: $($user.DisplayName)"
Set-QADUser $user -ObjectAttributes @{'userworkstations'=$(Search-MAAT $user.userworkstations)} |Out-Null
}
}
#Requires -PSSnapin Quest.ActiveRoles.ADManagement
#########################################################################################
# Created: Zakharchenko Andrey Ruslanovich
# Date: 2009.09.16
# Description: Скрипт ищет всех пользователей с определенным компьютером в свойстве
# userworkstations и заменяет их нужными именами компьютеров
#########################################################################################
Function Search-MAAT ($listcomputers) {
#--- создаем пустой масив
$mass = New-Object System.Collections.ArrayList
#--- заполняем массив
Foreach ($i in $listcomputers -split ',') { $mass.Add($i) | Out-Null }
$i = 0
While ($i -ne $mass.Count+1) {
#--- ищем совпадения и устанвливаем флаг
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-01') `
-and ($listcomputers -match 'IIS-02')) {
#--- тут флага нету, так как мы сразу удаяем не нежный элемент массива
$mass.Removeat($i)
}
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-01')) {
$check = 'iis-02'
}
if (($mass[$i] -match 'maat') -and ($listcomputers -match 'IIS-02')) {
$check = 'iis-01'
}
if (($mass[$i] -match 'maat') -and ($listcomputers -notmatch 'IIS-01') `
-and ($listcomputers -notmatch 'IIS-02')) {
$check = 'all'
}
#--- обрабатываемт полученные флаги
switch ($check) {
'all' { $mass[$i] = 'IIS-01,IIS-02' }
'iis-01' { $mass[$i] = 'IIS-01' }
'iis-02' { $mass[$i] = 'IIS-02' }
default { }
}
#--- удаляем при каждом прохоте на всякий случай переменную с флагом
if($check) {Remove-Variable check}
$i++
}
#--- собираем массив в строку с разделителем ','
$mass -join ','
}
$root = 'DC=isea,DC=ru'
Foreach ($user in Get-QADUser * -IncludedProperties 'userWorkstations' -SizeLimit 0 -SearchRoot $root) {
if ( $user.userWorkstations -match 'maat' ) {
Write-Host "Работы проводится над следующим пользователем: $($user.DisplayName)"
Set-QADUser $user -ObjectAttributes @{'userworkstations'=$(Search-MAAT $user.userworkstations)} |Out-Null
}
}
Собственно лень двигатель прогресса
Имена компьютеров можно изменить и использовать скрипт повторно.

.gif)
