Найти в Дзене
Manual For Geek and IT

Автоматическое перемещение компьютеров в заданные OU на основе значения атрибута "managedBy"

В организациях, где используется Active Directory для управления компьютерами, часто возникает необходимость автоматического перемещения компьютеров в определенные организационные единицы (OU). Это может быть полезно для упорядочивания компьютеров и обеспечения логической структуры в Active Directory.
Один из способов автоматического определения, в какую OU переместить компьютер, - использование атрибута "managedBy". Этот атрибут может содержать информацию о владельце компьютера или о пользователе, который на нем работает. В данной статье я хотел бы поделиться скриптом PowerShell, который позволяет перемещать компьютеры в соответствующие OU на основе значения атрибута "managedBy", исключая при этом компьютеры с операционной системой Windows Server.
Начнем с предоставления обзора скрипта: # Получение всех компьютеров, кроме Windows Server
$computers = Get-ADComputer -Filter {OperatingSystem -notlike "*Windows Server*"} -Properties *
foreach ($computer in $computers) {
$computerN

В организациях, где используется Active Directory для управления компьютерами, часто возникает необходимость автоматического перемещения компьютеров в определенные организационные единицы (OU). Это может быть полезно для упорядочивания компьютеров и обеспечения логической структуры в Active Directory.

Один из способов автоматического определения, в какую OU переместить компьютер, - использование атрибута "managedBy". Этот атрибут может содержать информацию о владельце компьютера или о пользователе, который на нем работает. В данной статье я хотел бы поделиться скриптом PowerShell, который позволяет перемещать компьютеры в соответствующие OU на основе значения атрибута "managedBy", исключая при этом компьютеры с операционной системой Windows Server.

Начнем с предоставления обзора скрипта:

# Получение всех компьютеров, кроме Windows Server
$computers = Get-ADComputer -Filter {OperatingSystem -notlike "*Windows Server*"} -Properties *

foreach ($computer in $computers) {
$computerName = $computer.Name
$managedBy = $computer.managedBy

# Извлечение OU пользователя из значения "managedBy"
$userOU = (($managedBy -split ",OU=") | Select-Object -Skip 1) -join ",OU="

# Добавление "OU=" в начале OU пользователя
$userOU = "OU=$userOU"

# Получение целевой OU пользователя
$targetOU = Get-ADOrganizationalUnit -Filter "DistinguishedName -eq '$userOU'"

if ($targetOU) {
$targetPath = $targetOU.DistinguishedName

# Проверка, совпадает ли текущая OU компьютера с целевой OU пользователя
if ($computer.DistinguishedName -ne $targetPath) {
# Перемещение компьютера в целевую OU пользователя
Move-ADObject -Identity $computer.DistinguishedName -TargetPath $targetPath -Confirm:$false
Write-Host "Компьютер '$computerName' перемещен в OU '$targetPath'"
} else {
Write-Host "Компьютер '$computerName' уже находится в правильной OU"
}
} else {
Write-Host "OU '$userOU' не найдена в Active Directory"
}
}

Этот скрипт выполняет следующие шаги:

1. Получает список всех компьютеров в Active Directory, исключая компьютеры с операционной системой Windows Server.
2. Для каждого компьютера:

    a. Извлекает значение атрибута "managedBy", которое содержит информацию о владельце компьютера или о пользователе, который на нем работает.

    b. Извлекает OU пользователя из значения "managedBy", исключая префикс "OU=".

    c. Получает целевую OU пользователя по значению "userOU".

    d. Проверяет, совпадает ли текущая OU компьютера с целевой OU пользователя.

    e. Если текущая OU компьютера отличается от целевой OU пользователя, перемещает компьютер в целевую OU.

    f. Выводит сообщение о результате перемещения компьютера.