parafoxer: (Foxic)
[personal profile] parafoxer

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

Как обычно мануальчик будет самый понятный, чтобы даже самый начинающий администратор AD мог понять и применить.

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

change_stud_param01




Если эта вкладка не отображается - в консоли щелкаем меню "Вид" и отмечаем строку "Дополнительные компоненты"
Также свойства пользователя можно получить с помощью команды 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 (епт, язык сломаешь))):

change_stud_param02



-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, изменен без напрягов над кодом.

From: [identity profile] igor kopylov (from livejournal.com)
спасибо. очень полезная статейка! и удачно мной найденная.

однако столкнулся с некоторыми трудностями импорта, когда в качестве идентификатора пользователя использовал не -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}
не предусмотрено?

в любом случае даже если и не ответите, спасибо.
From: [identity profile] parafoxer.livejournal.com
1. "столкнулся с некоторыми трудностями импорта, когда в качестве идентификатора пользователя использовал -Identity $_.displayname" - на это могу только сказать , что samacccount использовать правильнее, т.к. это уникальный идентификатор. Вероятно ищете не в том ОU, проверьте пути в параметре -SearchBase "OU=Student,OU=Students_OU,DC=domain,DC=ru", скопируйте путь прямо из свойств OU, из редактора атрибутов.

2. "использовал ключик -Coding unicode" - дело хорошее, но я же писал - на мой взгляд батник должент содержать только совершенно необходимые параметры, ничего лишнего. При выполнении ИМПОРТА какой смысл ставить -Coding unicode - если текст в кодировке ANSI вам выдаст ошибку, если нет - проглотит)))

рад если вам помог, счастья в Новом году)

вопрос

Date: 2014-03-25 07:33 am (UTC)
From: [identity profile] Олег Бельчиков (from livejournal.com)
Все обыскал не могу найти
В AD на пользователе есть такая вкладка как Профиль служб терминальных серверов
В этой вкладке тоже есть домашний каталог - который подключается на терминальных серверах - адрес которого тоже нужно поменять!!
Подскажите где найти АТРИБУТ ))

Re: вопрос

Date: 2014-03-27 05:15 am (UTC)
From: [identity profile] parafoxer.livejournal.com
На самом деле именно с атрибутами, связанными с терминальными настройками все плохо, но я скажу как сделать чтоб все было хорошо)))
Недавно встала задача поменять путь к профилю сразу куче пользователей. Стандартными средствами это сделать чересчур сложно, бился пару дней, там каике-то грабли от 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)
From: [identity profile] Олег Бельчиков (from livejournal.com)
Спасибо за направление - мою проблему это решило

Date: 2014-04-22 06:58 am (UTC)
From: [identity profile] Мисима Эйри (from livejournal.com)
День добрый мне нужно изменить у пользователей sAMAccountName, но фильтр по userPrincipalName почему то не работает. не может найти пользователей.

Date: 2014-04-22 07:55 am (UTC)
From: [identity profile] parafoxer.livejournal.com
навскидку - по-моему если дело касается sAMAccountName то проще вообще создать новых пользователей, потому что это - ключевой параметр учетной записи вообще. Про фильтр не понял - просто экспортируйте пользователей из определенного OU, без фильтров, ведь у пользователей может не быть заполнено значение userPrincipalName (например у меня оно не заполнено). Включите выключенные учетки перед экспортом. Экспортируйте из этого OU ВСЕХ пользователей со ВСЕМИ параметрами, затем удалите какого-нибудь явно ненужного пользователя из AD, измените в файле с экспортированными данными sAMAccountName этого пользователя. Все остальные данные (других пользователей) удалите из файла. Импортируйте данные тестового пользователя из файла обратно. Если тест удастся - проделайте то же самое с другими пользователями.
Если все это кажется сложным - пробуйте продукт от Quest software, там тот же PS, но более простым языком, я недавно менял свойство tsProfile, так вот оказалось что станлдартными средствами PS это слишком сложно, проще оказалось скачать и поставить Qpowershell)))
Edited Date: 2014-04-22 07:56 am (UTC)

Date: 2014-04-22 12:39 pm (UTC)
From: [identity profile] Мисима Эйри (from livejournal.com)
ПО ObjectSid можно отфильтровать?
Предыстория такова. Достался домен абсолютно без прав. Мигрирую на новый через одно место: Вытаскивал\импортировал учетки через CSVDE и такой баг - перенеслось всё кроме sAMAccountName я в шоке. это поле заполнилось автоматом в виде $4O2000-VQ2NGFNSRLIO

Похоже придется все экспортировать, удалить учетки и залить обратно

Date: 2014-04-29 04:08 am (UTC)
From: [identity profile] parafoxer.livejournal.com
Не встречался с таким, но вот домен без прав ломал каким-то линуксовым диском - загружаешь с него контроллер домена и меняешь пароль доменного админа и вперед, экспортировать учетки. По-моему это проще. Если учеток немного - можно вообще дефолт объявить, тупо снова всем логины создать и пароли)))

Date: 2016-09-28 10:29 am (UTC)
From: [identity profile] Алексей Кованев (from livejournal.com)
Советую воспользоваться утилитой "Active Directory Bulk Operations". Программа позволяет пакетно создавать и редактировать учетные записи пользователей, а так же копировать учетные записи с сохранением членства в группах и полной иерархией организационных единиц в другой домен! Скачать можно тут: http://www.sysadminsoft.ru/active-directory-bulk-operations

Profile

parafoxer: (Default)
parafoxer

September 2025

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 12:46 pm
Powered by Dreamwidth Studios