Такое дебильное название, но зато поисковикам хорошо))) НИЧЕГО дельного, а главное - простого!!! в инете не нашел, какие-то куски, решения тупо нет. Вот не понимаю - неужели никто этого не делает? Какие-то безумно сложные решения конечно есть, портянки по поллиста, но нафига из пушки по воробьям палить, если есть наш любимый конвейер и экспорт в csv, делающий процесс изменения может не самым быстрым, зато внятным)))
Как обычно мануальчик будет самый понятный, чтобы даже самый начинающий администратор AD мог понять и применить.
Итак, требуется сменить путь к домашней папке пользователя в AD. Точнее у целой кучи пользователей. Можно менять и любой другой параметр. Описанный путь не самый удобный и автоматизированный, зато понятный и не требует зверских напряжений по разбору кода.
Каждый объект в AD обладает набором атрибутов (свойств). Нам нужно сменить имя сервера в пути к домашней папке пользователя - это атрибут homedirectory. Где посмотреть доступные атрибуты? Можно через консоль mmc, свойства объекта (пользователя), вкладка "Редактор атрибутов":

Если эта вкладка не отображается - в консоли щелкаем меню "Вид" и отмечаем строку "Дополнительные компоненты"
Также свойства пользователя можно получить с помощью команды get-aduser, но тут мы уже и подошли к делу))
1. Запускаем powershell, разрешаем запуск скриптов (параноики, задроченые мыслями о мега-безопасности идут лесом, или учить как выстраивать ДМЗ и рулить файрволами)))
Set-ExecutionPolicy Unrestricted
2. Импортируем модуль AD командой:
Import-Module ActiveDirectory
3. Получаем список всех пользователей из определенного OU в формате csv, фильтруя полученные результаты по свойствам, сортируя их по имени и выбирая только нужные нам параметры - sAMAccountName,homeDirectory
Get-ADUser -SearchBase "OU=Student,OU=Students_OU,DC=domain,DC=ru" -Filter * -Property * | Sort-Object -Property Name | Select-Object -Property sAMAccountName,homeDirectory | Export-CSV -Path C:\stud.csv
Разберем детально:
Get-ADUser -SearchBase "OU=Student,OU=Students_OU,DC=domain,DC=ru" - даем задачу команде Get-ADUser с параметром -SearchBase получить все объекты в некоем OU в AD. Чтобы не ошибиться и правильно прописать свойства OU, из которого нужно получать объекты, смотрим свойства этого OU также через редактор атрибутов, атрибут называется distinguishedName (епт, язык сломаешь))):

-Filter * -Property * - фильтруем полученные объекты, нам нужны все (там у нас только пользователи, если у вас в одном OU все напихано - и компы и люди и кони - вводите какой-нибудь фильтр, или перемещайте в отдельный OU (рекомендуется)))
| Sort-Object -Property Name- передаем в конвейер полученные данные и сортируем их по свойству "Имя" иначе будет бардак в файле экспорта
| Select-Object -Property sAMAccountName,homeDirectory - передаем в конвейер свойства-атрибуты выбранных объектов, нужные нам - аккаунтнэйм и домашнюю папку. Можно добавить другие свойства-атрибуты, которые вам требуются.
| Export-CSV -Path C:\stud.csv - передаем в конвейер экспорта в файлик полученные данные
4. Редактируем полученный список C:\stud.csv, и приводим его вот в нужный нам вид (в моем случае это 2 столбца, 2 значения):
sAMAccountName,homeDirectory
student0001,\\fileserver002\students\student0001
Первая строка - перечисления параметров-атрибутов через запятую
Вторая строка - перечисления значений этих параметров через запятую
С редактированием файлика думаю проблем нет - открываем в экселе, или файловом менеджере и меняем все автозаменой.
Сохраняем файлик ОБЯЗАТЕЛЬНО в формате Unicode!!! powershell любит юникод)))
5. Импортируем отредактированный список в АД
Import-CSV -Path "C:\stud.csv" | ForEach-Object -process {Set-ADuser -Identity $_.sAMAccountName -homeDirectory $_.homedirectory}
Разберем детально:
Import-CSV -Path "C:\stud.csv" - импортируем данные из нашего файлика
| ForEach-Object -process - передаем данные в конвейер, указывая, что для каждого объекта выполняем команду, указанную в скобках { }
{Set-ADuser -Identity $_.sAMAccountName -homeDirectory $_.homedirectory} - в скобках указываем команду установки атрибутов set-aduser, идентифицируем пользователя по аккаунтнэйм -Identity $_.sAMAccountName и указываем что заменяем мы параметр homeDirectory на тот, который указан в файлике.
Результат - путь к домашней папке у всех пользователей, которых мы получили из нужного нам OU, изменен без напрягов над кодом.
Изменение свойств пользователя AD через powershell
Date: 2013-12-28 04:22 pm (UTC)однако столкнулся с некоторыми трудностями импорта, когда в качестве идентификатора пользователя использовал не -Identity $_.sAMAccountName ,а -Identity $_.displayname причем этот самый displayname = "Фамилия Имя Отчество"
естественно все в Unicode. но пишет ошибку что нет такого объекта во всем лесе AD. (кстати а нет ли возможности ограничение до какого нибудь уровня OU?)
когда экспортировал из AD в файл.csv использовал ключик -Coding unicode
а в случае импорта подобных ключей в команде подобной:
Import-CSV -Path "C:\stud.csv" | ForEach-Object -process {Set-ADuser -Identity $_.displayname -homeDirectory $_.homedirectory}
не предусмотрено?
в любом случае даже если и не ответите, спасибо.
Re: Изменение свойств пользователя AD через powershell
Date: 2013-12-31 06:25 am (UTC)2. "использовал ключик -Coding unicode" - дело хорошее, но я же писал - на мой взгляд батник должент содержать только совершенно необходимые параметры, ничего лишнего. При выполнении ИМПОРТА какой смысл ставить -Coding unicode - если текст в кодировке ANSI вам выдаст ошибку, если нет - проглотит)))
рад если вам помог, счастья в Новом году)
вопрос
Date: 2014-03-25 07:33 am (UTC)В AD на пользователе есть такая вкладка как Профиль служб терминальных серверов
В этой вкладке тоже есть домашний каталог - который подключается на терминальных серверах - адрес которого тоже нужно поменять!!
Подскажите где найти АТРИБУТ ))
Re: вопрос
Date: 2014-03-27 05:15 am (UTC)Недавно встала задача поменять путь к профилю сразу куче пользователей. Стандартными средствами это сделать чересчур сложно, бился пару дней, там каике-то грабли от MS, какие конктерно щас уж и не вспомнить, поэтому пришлось использовать плагин powershell от Quest Software. Скачайте и установите QuestPowershell на контроллер домена, это бесплатно, найдете в инете.
Вот мой пример, как я делал:
#С помощью QuestPowershell меняем у пользователей путь к профилю при входе на сервер терминалов
#задаем путь куда сохранить данные
#указываем ОУ откуда получаем пользователей
#получаем из ОУ пользователей | выбираем из них все объекты, обладающие самаккаунт и тспрофайлпат | экспортируем
#
$FilePath = "c:\user6.csv"
$OuDomain = "CN=Users,DC=test,DC=corp,DC=local"
Get-QADUser -searchRoot $OuDomain | select-Object SamAccountName,TsProfilePath | Export-Csv $FilePath
#Берем данные из отредактированного (!!!) CSV-файла user6.csv | Передаем в конвейер, команда выполнять для каждой строки {устанавливаем значения - идентификация по самаккаунтнэйм
#установка пути к профилю}
#
#
Import-CSV -Path "C:\user6.csv" | ForEach-Object -process {Set-QADuser -Identity $_.sAMAccountName -TsProfilePath $_.TsProfilePath}
Пример отредактированного файла с данными:
SamAccountName,TsProfilePath
gvolovina,\\dc1\profiles\userpro
yuenimenkov,\\dc1\profiles\userpro
Re: вопрос
Date: 2014-03-31 06:32 am (UTC)no subject
Date: 2014-04-22 06:58 am (UTC)no subject
Date: 2014-04-22 07:55 am (UTC)Если все это кажется сложным - пробуйте продукт от Quest software, там тот же PS, но более простым языком, я недавно менял свойство tsProfile, так вот оказалось что станлдартными средствами PS это слишком сложно, проще оказалось скачать и поставить Qpowershell)))
no subject
Date: 2014-04-22 12:39 pm (UTC)Предыстория такова. Достался домен абсолютно без прав. Мигрирую на новый через одно место: Вытаскивал\импортировал учетки через CSVDE и такой баг - перенеслось всё кроме sAMAccountName я в шоке. это поле заполнилось автоматом в виде $4O2000-VQ2NGFNSRLIO
Похоже придется все экспортировать, удалить учетки и залить обратно
no subject
Date: 2014-04-29 04:08 am (UTC)no subject
Date: 2016-09-28 10:29 am (UTC)