Перемещение объектов AD между OU

Вопрос или проблема

Мы обновляем Windows 10 до 11. Я пытаюсь автоматизировать перемещение объектов рабочих станций между двумя OU, однако скрипт ничего не находит.

Import-Module ActiveDirectory
$SourceOU = “OU=Win10,OU=Fake Workstations,DC=Fake,DC=Fake,DC=Fake"
$TargetOU = "OU=Win11,OU=Fake Workstations,DC=Fake,DC=Fake,DC=Fake"
$Computers = Get-ADComputer -SearchBase $SourceOU -Filter * -Property OperatingSystem |
             Where-Object { $_.OperatingSystem -eq “Microsoft Windows 11 Enterprise" }

if ($Computers.Count -gt 0) {
    foreach ($Computer in $Computers) {
        # Переместить каждый компьютер в целевую OU
        Write-Host "Перемещаем $($Computer.Name) в $TargetOU"
        Move-ADObject -Identity $Computer.DistinguishedName -TargetPath $TargetOU
    }
    Write-Host "Операция успешно завершена!"
} else {
    Write-Host "Не найдено ни одного компьютера с Microsoft Windows 11 Enterprise в $SourceOU."
}

Ответ или решение

Перемещение объектов Active Directory (AD) между организационными единицами (OU) является важной задачей для системных администраторов, особенно в процессе обновления операционных систем на рабочих станциях, как в вашем случае при переходе с Windows 10 на Windows 11. Рассмотрим вашу задачу детально и разберем возможные причины, почему скрипт не выполняет ожидаемые действия, предложив при этом решения.

Теория

Active Directory функционирует как централизованная система управления, предоставляя возможность хранить информацию об объектах в сети, таких как пользователи, компьютеры и другие ресурсы. Организационные единицы (OU) служат для структурирования объектов внутри AD, предоставляя удобные средства управления.

Основная задача вашего скрипта — это автоматизация процесса перемещения объектов рабочего стола из одной OU, содержащей компьютеры под управлением Windows 10, в другую OU, подготовленную для компьютеров с Windows 11. Однако ваш скрипт не выполняет перемещение, поскольку объекты, которые он фильтрует, не соответствуют критериям, таким как операционная система, указанная в скрипте.

Пример

Ваш текущий скрипт сначала импортирует модуль Active Directory, определяет исходную и целевую OU, затем выполняет поиск объектов рабочих станций в исходной OU, фильтруя их по операционной системе:

$Computers = Get-ADComputer -SearchBase $SourceOU -Filter * -Property OperatingSystem |
             Where-Object { $_.OperatingSystem -eq “Microsoft Windows 11 Enterprise" }

Если объектов с операционной системой "Microsoft Windows 11 Enterprise" в исходной OU не найдено, скрипт выводит сообщение о том, что такие компьютеры не обнаружены, и, соответственно, не выполняет перемещение.

Возможные проблемы и их решения

  1. Несоответствие строковых литералов: В PowerShell часто бывает необходимо убедиться, что используемые строковые литералы соответствуют точным значениям, включая кавычки. В вашем скрипте есть проблема с использованием смарт-квот ("“”) вместо простых кавычек ("") — это может привести к несрабатыванию фильтрации. Убедитесь, что везде используются двойные кавычки ("").

  2. Неправильный фильтр операционной системы: Возможно, в AD для объектов рабочих станций зарегистрирована другая строка для свойства OperatingSystem. Рекомендуется выполнить отдельную проверку с минимальным набором данных, например:

    Get-ADComputer -SearchBase $SourceOU -Filter * | Select-Object Name, OperatingSystem

    Это позволит вам увидеть, какие значения на самом деле зарегистрированы в AD и скорректировать фильтр в скрипте.

  3. Проверка наличия объектов: Убедитесь, что в исходной OU действительно находятся объекты с Windows 11. Если переход с Windows 10 осуществлен неправильно, таких объектов может действительно не быть в данной OU.

  4. Права доступа: Убедитесь, что ваша учетная запись имеет достаточные права для перемещения объектов AD. Выполните команду $USER в PowerShell, чтобы подтвердить, что вы вошли под правильной учетной записью.

  5. Логирование и отладка: Для упрощения диагностики добавьте логирование в скрипт. Например:

    Write-Host "Processing computer: $($_.Name), OS: $($_.OperatingSystem)"

Применение

Расширив скрипт дополнительными проверками и возможностями наподобие вышеуказанных, вы можете добиться успешного деплоя Windows 11 и соответствующего рефакторинга в AD:

Import-Module ActiveDirectory
$SourceOU = "OU=Win10,OU=Fake Workstations,DC=Fake,DC=Fake,DC=Fake"
$TargetOU = "OU=Win11,OU=Fake Workstations,DC=Fake,DC=Fake,DC=Fake"

# Проверка объектов в SourceOU
$Computers = Get-ADComputer -SearchBase $SourceOU -Filter * -Property OperatingSystem |
             Where-Object { $_.OperatingSystem -like "*Windows 11*" }

if ($Computers.Count -gt 0) {
    foreach ($Computer in $Computers) {
        Write-Host "Moving $($Computer.Name) to $TargetOU"
        Move-ADObject -Identity $Computer.DistinguishedName -TargetPath $TargetOU
    }
    Write-Host "Operation completed successfully!"
} else {
    Write-Host "No Windows 11 computers found in $SourceOU."
}

Такой подход обеспечит гибкость и надежность автоматизации в вашей инфраструктуре. Не забывайте тестировать изменения в скрипте в контролируемой среде для предотвращения ошибок в рабочей архитектуре AD.

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

Капча загружается...