Powershell создание пользователя в 1с
Порядок действий (описание команд) при создании учетной записи и внесение в OU и ГБ:
1. Установить компонент управления AD на сервер, с которого выполняются скрипты:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature
Выполняется однократно
2. Запросить список подразделений (в окне 1С выбрать одно значение из полученного перечня):
Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Format-Table Name
Полученный список использовать в шаге №7
3. Запросить список групп безопасности(в окне 1С выбрать одно значение из полученного перечня):
Get-ADGroup -Filter 'Name -like "*"' | Format-Table Name
Полученный список использовать в шаге №8
4. Дать права на соединение без сертификата в PowerShell (PoSh):
Set-ExecutionPolicy RemoteSigned (запуск PoSh от администратора)
Требуется ввод пароля
ExchangeServer - DNS-имя вашего Exchange сервера
6. Импортировать командлеты exchange в локальную сессию PoSh:
Import-PSSession $Session –DisableNameChecking
7. Добавить аккаунт (AD и Почта):
New-Mailbox -Name "Иван Иваныч" -UserPrincipalName i.ivanych@ DOMAIN .ru -PrimarySmtpAddress "i.ivanych@ DOMAIN .ru" -OrganizationalUnit "OUName" -Password (ConvertTo-SecureString -String 'Aa313131' -AsPlainText -Force) -FirstName "Ivan" -LastName "Ivanych"
Где:
– Name это выводимое имя пользователя
- UserPrincipalName это «принципиальное» имя пользователя (его логин)
- OrganizationalUnit это подразделение организации
- Password это пароль
- FirstName это Имя пользователя
- LastName это Фамилия пользователя
- PrimarySmtpAddress это основной email пользователя
- OUName это наименование OU
8. Внести пользователя в группу безопасности AD:
Add-ADGroupMember -Identity "ИмяГруппыБезопасности" -Members "i.ivanych"
9. Удалить открытую сессию с Exchange:
Remove-PSSession $Session
Также в обработке можно посмотреть создание через COM пользователя ИБ, пользователя в справочнике "Пользователи", копирование настроек с уже существующего пользователя и отправку письма на почту нового сотрудника (с использованием конфигурации "Управление IT-отделом 8, редакция 3.1 (3.1.3.3) (softonit.ru)":
Обработка тестировалась (в текущий момент используется) на конфигурации "Управление IT-отделом 8, редакция 3.1 (3.1.3.3) (softonit.ru)"
Когда новый сотрудник выходит на работу, обычно мало просто создать ему аккаунт в Active Directory: нужно включить его в группы безопасности, создать личную папку на сетевом диске, почтовый ящик, добавить аккаунт в ERP\CRM систему… Все это частично решается копированием аккаунта, но тогда нужно еще вовремя вспомнить и правильно настроить атрибуты Active Directory.
Но есть и более изящные варианты решения задачи. Так что, если вам надоело создавать аккаунты вручную ― приглашаю под кат.
В качестве простой автоматизации для придания новому аккаунту нужных «форм» может выступать и скрипт на любом привычном языке. В качестве параметров он будет принимать данные пользователя и подразделения.
Я буду разбирать более интересные примеры, по сути основанные на этом методе.
Такой скрипт может являться «бэкендом», которому передается предварительно подготовленный «фронтендом» файл в любом текстовом формате: JSON, XML или вовсе CSV.
Например, можно подготовить JSON файл для создания пользователя и папки для него такого вида:
В этом примере файл обладает определенной структурой и поддерживает автоматическое создание нескольких пользователей разом. Теперь нужно написать скрипт, который будет парсить содержимое файла и выполнять определенные действия. В нашем примере подойдет такой командлет:
Теперь можно запустить получившийся скрипт и насладиться его работой:
Работа командлета.
Стоит заметить, что командлет является примером, создает пользователей отключенными и не включает их ни в какую группу безопасности. Да и права на папку стоит задать. Доработать решение под вашу инфраструктуру предлагаю самостоятельно.
Если командлет можно настроить на запуск по расписанию раз в 5 минут, то осталось придумать, что будет формировать JSON. Это может быть и простой веб-интерфейс, GUI на том же PowerShell и прочие 1С. Интересный пример использования в качестве фронта Google Forms и заодно создание пользователям ящика в G Suite рассмотрен в материале «Ещё один пример автоматизации или PowerShell + Google Apps Script».
Разберу еще несколько примеров автоматизации, облегчающих жизнь.
Бывало и так, что по регламенту для каждого нового пользователя создавалась папка на сетевом диске в подпапке подразделения. И каждый раз на почту сыпались заявки, что папки нет или к ней нет доступа ― загруженные инженеры попросту забывали про такие мелочи.
Чтобы уменьшить негатив, еще до появления PowerShell был разработан скрипт на vbs. Раз в сутки он подключался к AD и собирал оттуда свежесозданных пользователей. А потом создавал папку по стандарту и задавал нужные права при помощи xcacls.vbs такой командой:
Где user ― это имя нового пользователя, folder ― путь к свежесозданной папке, а domain ― наш домен.
Позже для создания пользователей был уже разработан сложный механизм на AutoIT с GUI. Он формировал имя учетной записи по правилам транслитерации, создавал пользователей в 1С и даже выдавал проксимити-карты для доступа на территорию офиса. Права на папки в этом механизме задаются при помощи библиотеки Permissions.au3, которая использует системные dll advapi32.dll и kernel32.dll.
Часть скрипта для нужных разрешений:
В PowerShell аналогичная выдача прав будет выглядеть примерно так:
Пожалуй, управление ACL ― это то немногое, что на PowerShell реализуется нетривиально. Перейдем к тому, в чем PowerShell силен и прост.
Если у вас установлен Exchange как почтовый сервер, то создавать пользователей сразу с почтовым ящиком поможет командлет New-Mailbox. Для создания пользователя в первоначальном скрипте можно использовать такую команду:
Аналогично будет и с MS Lync:
Если у вас используются другие решения ― например, Postfix для почты и Asterisk для телефонии, ― на помощь придет возможность подключаться по SSH к *nix серверам с систем Windows. Подробно процедура описана в статье «Перекрестное опыление: управляем Linux из-под Windows, и наоборот». Я же напомню, что запуск команд производится через командлет Invoke-Command:
Интереснее дела обстоят с прочими системами, вроде 1С.
Где $rght ― это права пользователя ИБ, а $group ― нужная группа пользователя. Оба значения берутся из шаблона вместе с ФИО.
Разумеется, точный скрипт будет зависеть от вашей конкретной конфигурации 1С ― не забудьте проконсультироваться с программистом 1С.
Если дисциплина в вашей организации на высоте не только в отделе ИТ, то можно и вовсе избавиться от создания новых пользователей. Ведь при приеме на работу сотрудника обычно вносят в базу в отделе HR, да и при увольнении делают соответствующую отметку.
Основанием для создания учетной записи пользователя, ее блокировки или перемещения будет не просто занесение пользователя в базу, а приказ о приеме на работу, об увольнении или о перемещении в другое подразделение.
В случае с 1С можно сделать регулярную выгрузку из базы новых и уволенных сотрудников хоть в том же формате JSON. А дальше уже пусть работает машина. С примером скрипта, обрабатывающего выгрузку в формате CSV можно ознакомиться в статье «Автоматизация кадровых изменений на PowerShell».
Другим вариантом будет запуск регламентных заданий сразу из 1С ― благо 1С тоже довольно богатый возможностями язык.
Например, создание пользователя в AD будет выглядеть так:
Подробнее с механизмом работы 1С и AD, а также с примерами готовых функций можно ознакомиться в статье «Работа с Active Directory из 1С» на портале «Инфостарт».
А готовы ли вы доверить создание пользователей, пусть и опосредованно, сотрудникам HR?
Эта статья посвящена автоматизации операций по созданию, перемещению и увольнению людей в соответствии с кадровыми изменениями, сделанными в 1С.
Принцип работы скрипта заключается в парсинге выгружаемых из 1С данных пользователя и присвоении этих данных переменным скрипта с дальнейшим их использованием.
В нашей компании после заведения пользователя в 1C создается CSV файл с данными, пример ниже:
document type | userName | FIO | Department | Department |
---|---|---|---|---|
прием на работу | USERtester1 | Иванов Иван Иванович | Диспонент | Отдел диспозиции и оформления документов |
перемещение | USERtester2 | Петров Иван Иванович | Менеджер по пролонгации | Отдел кредитования и страхования |
увольнение | USERtester3 | Сидоров Иван Иванович | Менеджер по пролонгации | Отдел кредитования и страхования |
Скрипт содержит три функции (usrcreate; usrmove; usrdelete) в соответствии с типами операций:
Прием на работу
Ищем шаблон пользователя на основе должности и названия отдела, после нахождения получаем необходимые атрибуты и группы, записываем их в нового пользователя, вместе с тем создается и подключается домашняя папка, а также привязывается почтовый адрес. На почту отправляется отчет с именем пользователя, ФИО и списком групп, в которые он был добавлен.
Кадровое перемещение
Находим шаблон пользователя по новой должности и новому отделу сотрудника, с которого мы получаем новый список групп и адрес OU, после нахождения удаляем старые группы у перемещаемого пользователя и добавляем его в новые, одновременно переносим его в OU, соответствующий новому отделу (если есть такое деление в AD), и меняем должности на новые соответственно. На почту отправляется отчет с новыми должностью, отделом и группами.
Увольнение
Отключаем почтовый ящик, удаляем пользователя из всех групп, перемещаем его в папку для отключенных пользователей и отключаем его аккаунт. На почту отправляется отчет о том, что пользователь отключен и уволен.
Скрипт включает в себя ряд проверок:
Проверка на необходимость запуска оснасток Exchange и Active Directory
В данной проверке производится поиск данных для обработки если они не найдены оснастки загружаться не будут, что сэкономит примерно 7 секунд времени.
Проверка на существование данных для обработки в переменных $getstaff|$movestaff|$delstaff
Для запуска функций создания, перемещения и удаления пользователей.
Проверка на существование создаваемого пользователя
Для проверки дубликатов заданий на создание пользователя.
Проверка на существование сетевой папки пользователя
Для обхода ошибки о существовании папки.
Проверка должности и департамента
Для проверки на дублирование заявки на перемещение, когда пользователь уже был перемещен на новую должность.
Проверка на увольнение пользователя
Для проверки на дублирование заявки на увольнение, когда пользователь уже был уволен.
За несколько лет сначала вынужденного, а потом и вполне занимательного администрирования 1С у меня накопился набор решений под большинство особенностей продукта. Предлагаю отложить в сторону высокие материи про кластеры и тюнинг SQL, и перетряхнуть запасы скриптов и механизмов, которые облегчают жизнь с 1С.
Будут как простые инструменты создания новых пользователей и мониторинга "все ли вышли из базы", так и более изощренные интерфейсы проверки целостности базы и ее перемещения.
Как у большинства сложных приложений, у 1С через некоторое время работы вылезают странные ошибки, и возникает порой необъяснимое поведение. Специальные люди по 1С советуют в таких случаях почистить кэш.
Если запустить 1С с параметром /ClearCache, то будут очищены только клиент-серверные запросы. Локальные метаданные останутся и их нужно удалять отдельно на уровне файлов и папок. Эти данные хранятся в профиле пользователя, в папках с длинными названиями из GUID баз данных. Если баз на сервере немного, то такой кэш нетрудно удалить руками. Но если БД исчисляется десятками, то чистке вручную вы не обрадуетесь.
В подобных ситуациях выручит скрипт на Powershell, который запускается каждый раз при выходе пользователя из системы:
И никаких связанных со старым кэшем проблем.
Для исправления испорченной файловой базы в поставку 1С входит утилита chdbfl.exe, которая просто считывает содержимое базы во временный файл. Если какие-то данные считать не может — пропускает. При этом у нее нет ключей запуска для автоматизации, и проверку приходится запускать вручную.
Вообще, правильнее запускать проверку БД конфигуратором, но этот процесс проходит значительно дольше. Если же использовать только проверку физической целостности средствами chdbfl.exe, то не забывайте делать резервную копию из-за возможной потери данных.
Для баз 8.1 Андрей Скляров создал хороший инструмент Check1CD, с двумя параметрами запуска: "исправлять найденные ошибки" и “путь к базе”.
Но в Check1CD не хватает двух вещей:
Раз есть "хотелка" и немного свободного времени, то почему бы не попробовать решить вопрос самостоятельно?
Доработать код для передачи параметров через ключи командной строки — дело техники.
С выходом 1С 8.2 возникла проблема — путь к chdbfl менялся с установкой нового релиза. Что ж, дополним скрипт:
Надо сказать, недавно был опубликован исходный код Check1CD. Да, тоже на AutoIT.
Аналогичный механизм можно применять и для автоматического запуска различных регламентных механизмов, где нужно запускать 1С и ждать завершения операции.
При различных регламентных операциях с 1С (ночное обновление конфигурации или бэкап в .dt) важно обеспечить отсутствие подключенных к ней пользователей. Можно конечно запускать 1С: Предприятие с ключом /C ЗавершитьРаботуПользователей, но это не всегда удобно, да и хочется же потом написать личное письмо с рекомендациями по устранению склероза.
Можно использовать штатную возможность подключения к 1С через COMConnector и скрипт на AutoIT. Код написан под 1С 8.1 и позволяет выкинуть пользователей из базы с записью в журнал.
Но операцию иногда нужно проворачивать по просьбе самого пользователя, который запустил "тяжелый" отчет и повесил 1С. Если не хотите решать эти вопросы самостоятельно, то просто выведите любителям “тяжелых” отчётов ярлык на скомпилированный скрипт:
Еще COMConnector помогает проверить наличие обновлений конфигурации, получить какую-то информацию из базы, и автоматизировать заведение пользователей в 1С.
На мой взгляд, создавать новых пользователей 1С должен системный администратор, а не программист 1С. Но последнему нужно сделать процесс максимально простым. Чтобы администратору не приходилось "заглядывать" в каждую базу отдельно, можно использовать еще один скрипт.
Юрлиц развелось слишком много — нужно разбивать на столбцы.
Занятно, но после смены нескольких поколений администраторов в одной компании из далекого прошлого новенькие уже не знали как создать пользователя вручную.
Если нужно перенести базу 1С: Предприятия вместе с ее данными в SQL на другой сервер, то делать это вручную целесообразно только для 1-2 БД.
Список баз для миграции можно брать и из файла, а лог выводить в текстовый файл. Аналогичным образом можно конвертировать несколько десятков баз из файловых в SQL простой выгрузкой-загрузкой в .dt
Конечно, это далеко не все, что можно автоматизировать в связке с 1С. Но разного рода обмены, получение real-time информации из 1С в других приложениях и прочие сценарии не попали в этот обзор из-за узкой направленности и специфики.
Наверняка у вас тоже есть свой набор "ноу хау" для администрирования 1С — будет здорово если поделитесь с коллегами в комментариях.
Скрипты и ноу-хау предоставлены avelor, за что ему огромное спасибо!
31.08.2020
itpro
Active Directory, PowerShell
комментариев 18
Самый простой способ создать нового пользователя в домене Active Directory – воспользоваться графической mmc оснасткой ADUC (Active Directory Users and Computers). Но в том случае, если в домене нужно завести сразу несколько учетных записей, их создание в ручном режиме может стать довольно утомительной для администратора процедурой. В этой статье мы рассмотрим пример автоматизации создания учетных записей пользователей в AD с помощью командлета PowerShell New-ADUser.
Используем командлет New-ADUser для создания новой учетной записи AD
Командлет New-ADUser входит в состав модуля Active Directory для PowerShell. Для использования этого модуля, нужно установить на компьютере соответствующую ОС версию RSAT и включить компонент Active Directory Module for Windows PowerShell.
Для импорта модуля в сессию PowerShell выполните команду:
Полный синтаксис командлета New-ADUser можно получить с помощью команды
Get-Command New-ADUser –Syntax
В минимальной версии для создания новой учетной записи пользователя в AD достаточно указать только его имя.
New-ADUser testuser1
Как вы видите, новая учетная запись пользователя создалась в контейнере Users и является отключенной. Для использования данной учетной записи, ее нужно включить (командлет Enable-ADAccount), задать пароль (командлет Set-ADAccountPassword) и/или другие атрибуты (по необходимости).
Чтобы создать полноценную работоспособную учетную запись в определенном контейнере (OU) домена с паролем и сразу активировать ее, воспользуйтесь такой командой.
New-ADUser -Name "Test User2" -GivenName "Test" -Surname "User2" -SamAccountName "testuser2" -UserPrincipalName "testuser2@contoso.com" -Path "OU=Users,OU=Accounts,OU=SPB,DC=winitpro,DC=loc" -AccountPassword(Read-Host -AsSecureString "Input Password") -Enabled $true
Команда предложит сразу указать пароль нового пользователя (в защищенном виде)
Примечание. Пароль пользователя должен соответствовать доменным политикам безопасности паролей по длине, сложности и т.д., в противном случае командлет вернет ошибку: New-ADUser : The password does not meet the length, complexity, or history requirement of the domain. Вы можете использовать готовый скрипт PowerShell для генерации уникального пароля для каждого пользователя .
Информацию о созданном пользователе домена можно получить с помощью командлета Get-ADUser:
Массовое создание новых пользователей в AD из CSV скриптом PowerShell
В том случае, если в Active Directory нужно создать сразу большое количество пользователей, удобнее сохранить список пользователей в формате CSV (Excel) файла, а затем запустить специальный PowerShell скрипт. В данном файле нужно заполнить все значимые для вас атрибуты пользователей.
К примеру, мой Excel файл с пользователями состоит из 9 колонок и имеет следующий формат шапки:
Заполните данные пользователей и сохраните Exсel файл с в формате CSV c запятыми, в качестве разделителей. Кодировка файла должна быть обязательно UTF-8 (важно!). Кроме того, т.к. в значениях столбца OU есть запятые, нужно экранировать их, взяв в двойные кавычки.
Теперь можно импортировать данный CSV файл (new_ad_users2.csv) и создать в домене новых пользователей. Код готового PowerShell скрипта представлен ниже:
- Имя пользователя в домене мы будем заводить на английской языке, поэтому для транслитерации имен и фамилий пользователей с кириллицы в латиницу мы добавим в скрипт отдельную функцию Translit.
- Если в качестве разделителя CSV файла используется “;”, в командлет Import-Csv нужно добавить аргумент -delimiter «;»
После выполнения скрипта, откройте консоль ADUC, разверните указанный контейнер и убедитесь, что в AD появились новые учетки пользователей (отследить создание учетных записей в AD можно так: Получение списка учетных записей AD, созданных за последние 24 часа.)
Создаваемые учетные записи можно сразу добавить в определенную группу AD с помощью командлета Add-AdGroupMember, для этого нужно немного модифицировать скрипт, добавив в цикле строку:
Add-AdGroupMember -Identity AllowPublicInet -Members $_.samAccountName
Или сразу установить фотографию пользователя в AD, чтобы она отображалась в Outlook и Lync:
Предыдущая статья Следующая статья
Установка принтеров пользователям домена AD с помощью групповых политик
Настройка синхронизации времени по NTP с помощью групповых политик
Настройка политики паролей пользователей в Active Directory
Управление группами Active Directory с помощью PowerShell
Спасибо за статью, очень полезная информация.
Вот только не увидел, если пользователь с такой фамилией уже существует, что скрипт сделает в этом случае?
Если учетка уже есть, скрипт возвращает ошибку. По хорошему нужно добавить пару строк, проверки существования учетной записи в AD и если такая учетка уже есть, добавлять к имени учетки индекс 2, 3, 4 (например, aaivanov2, aaivanov3 и т.д.). Так вы обеспечите уникальность учетных записей в Active Directory.
Аккаунты с индексами не совсем гуд :). Лучше добавлять к учетке первый символ имени.
По моему индексы вполне нормальное решение. У меня в домене более 10000 учеток. Тёсок очень много. В этом случае цифровые индексы у аккаунтов — единственное удобноее решение. Ну и пусть, что aaivanov10 🙂
В этом случае может возникнуть путаница). У нас правда не 10 тыс. учеток :).
Но я принцип понял).
при создании пользака есть галочка заводить почту\не заводить, как ее в скрипт втулить? какие колонки добавить для графы «описание» и графы «комната»?? спс
Расскажите, чем вы вы завожите учетки пользователям? Насколько я помню возможность сразу создать учетку и ящик была в спец консоли ADUC в Exchange 2003.
Описание — поле в AD «description», комната — roomNumber
Здравствуйте, выдает такую ошибку:
Translit : Имя «Translit» не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьт
е правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:5 знак:16
+ $transLastName=Translit($_.LastName)
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Translit:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Какая версия PowerShell и Windows? Думаю что < 4.0.
Возможно в коде нужно поднять объявление функции Translit раньше ее вызова….
К сожалению, разрабы PS не удосужились добавить параметр поля «Remote Desktop Profile Path», так что полноценно New-ADUser невозможо использовать, приходится городить порно с adsi
Да, действительно, объектная модель модуля AD POsh не поддерживает прямое редактирование атрибута terminalservicesprofilepath через new-aduser или set-aduser.
Почему так, не знаю.
Народ действительно пользуется adsi
$users = Get-ADUser -Filter <(Enabled -eq $true)>-server $DC[1] -Properties * -SearchBase "OU=Users,DC= ,DC= " | Select-Object SAMAccountName,DisplayName,DistinguishedName,Mail,Homemdb,@
$nullTSP = Where-Object
foreach ($TSP in $nullTSP) $TSP.DistinguisedName.psbase.Invokeset("terminalservicesprofilepath","\\ \ \")
$TSP.DistinguishedName.setinfo()
>
Что-то не так в синтаксисе вашего скрипта или в csv файле (чаще всего проблемы с кодировкой, специсимволами и пробелами в именах).
Помогите пожалуйста разобраться….выходит такая же ошибка
Import-Module activedirectory
Import-Csv -path «C:\ad.csv» -Delimiter «;»| ForEach-Object $upn = $_.SamAccountName + “@house.local”
Get-Content C:\ad.csv | ConvertFrom-Csv -Delimiter «;»
New-ADUser -Name $transuname `
-DisplayName $uname `
-GivenName $_.FirstName `
-Surname $_.LastName `
-Title $_.JobTitle `
-UserPrincipalName $upn `
-SamAccountName $_.samAccountName `
-Path $_.OU `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true
>
Подскажите, я создал файл с русскими символами но когда загружаю получаю кодировку по типу 30 ���� можно как то указать кодировку для аплета?
Скорее всего вам просто нужно переконвертировать файл в кодировку UTF8
Добрый день!
Случайно не знаете, каким образом можно добавить что-либо в поле «Заметки», которая находится во вкладке «Телефоны»?
Нужно ввести туда инфу вида 01.01.1993, битрикс из этого поля вытягивает дату рождения сотрудника.
Вроде бы все поля нужные подобрал для себя, но это не могу найти…
Читайте также: