Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сопоставление сотрудников из 1С учетным записям в AD

Ответить
Настройки темы
PowerShell - [решено] Сопоставление сотрудников из 1С учетным записям в AD

Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Отправить PM | Цитировать


Прошу помочь по возможности в решении задачи:

Есть csv-выгрузка из 1С такого вида:
Код: Выделить весь код
Фамилия;Имя;Отчество;ТН;ДР;СНИЛС;Организация;Подразделение;Должность;Дата приема;Дата увольнения
Пупкин;Василий;Алибабаевич;0009876543;19.02.1966;888-777-666 55;ООО "Рога и копыта";Бухгалтерия;шредерщик;08.07.2000
и есть учетные записи в AD с displayname вида "Василий А. Пупкин".
Учитывая, что в домене отчество обозначено только первым символом, а в выгрузке полностью, то возможны совпадения при сравнении, т.к. в выгрузке есть еще , например, сотрудник "Пупкин Василий Алексеевич".
Необходимо очистить выгрузку от неуникальных в этом отношении записей, т.е. в данном случае удалить обоих Пупкиных, и дополнить очищенную выгрузку графой "samaccountname", заполнив ее соответствующими данными из AD (если есть).
Все учетные записи в AD находятся в OU Domain\Сотрудники. CSV в win-кодировке.

Отправлено: 11:32, 28-01-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата IvanXXL:
Учитывая, что в домене отчество обозначено только первым символом, »
Просто при создании пользователей администратор был ленив, чтобы вводить составляющую «О» (из ФИО) в «Выводимое имя» полностью.

Отправлено: 12:28, 28-01-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
Просто при создании пользователей администратор был ленив, чтобы вводить составляющую «О» (из ФИО) в «Выводимое имя» полностью. »
История умалчивает, почему админы в учетных записях не забивали отчество полностью, однако учетных записей уже более 2000, а порядок навести надо бы.

Отправлено: 13:45, 28-01-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


IvanXXL, рано или поздно отчество придётся вносить полностью.

Отправлено: 14:09, 28-01-2014 | #4


Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
рано или поздно отчество придётся вносить полностью. »
Так ведь поэтому и попросил помощи, если хотя бы половину удастся сопоставить, то я кучу времени сэкономлю.
А если по существу, то вы лично можете мне помочь в решении сформулированной задачи?

Отправлено: 14:51, 28-01-2014 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


ТН;ДР;СНИЛС;Организация;Подразделение;Должность;Дата приема;Дата увольнения - Атрибуты в AD требуется угадать, если есть дублирующие записи?

Подразделение;Должность - Присутствуют в AD?

Отправлено: 15:05, 28-01-2014 | #6


Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:37, 28-01-2014 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$result = Import-Csv users.csv -Delimiter ";" | 
	Group {"{0} {1} {2}" -f $_.Имя,$_.Отчество[0],$_.Фамилия} | Where {$_.Count -eq 1} | Foreach {
		$name = $_.Name
		$sam = (Get-ADUser -Filter "DisplayName -eq '$name'").SamAccountName
		if(Get-ADUser -Filter "DisplayName -eq '$name'") {
			$_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue $sam -PassThru
		}
		else {
			$_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue "" -PassThru
		}
	}

Последний раз редактировалось Kazun, 28-01-2014 в 16:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:07, 28-01-2014 | #8


Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Отправить PM | Цитировать


Kazun, если не сложно, то прошу прокомментировать работу кода, в частности мне непонятна строка "$name = $_.Name".

Отправлено: 07:11, 29-01-2014 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


1) Import-Csv users.csv -Delimiter ";" - Импортируем данные из CSV
2) Далее передаем по конвейеру командлету Group-Object, для поиска объектов, которые получаются одинаковые при приведении к виду Василий А Пупкин(если требуется Василий А. Пупкин - то изменить на "{0} {1}. {2}").

Код: Выделить весь код
PS > Import-Csv users.csv -Delimiter ";" | Group {"{0} {1}. {2}" -f $_.Имя,$_.Отчество[0],$_.Фамилия}

Count Name                      Group
----- ----                      -----
    2 Василий А. Пупкин         {@{Фамилия=Пупкин; Имя=Василий; Отчество=Алибабаевич; ТН=0009876543; ДР=19.02.1966
    1 Адексааа А. Бульба        {@{Фамилия=Бульба; Имя=Адексааа; Отчество=Алибабаевич; ТН=0009876543; ДР=19.02.1966
3) Далее передаем по конвейеру и фильтруем уникальные элементы.
Код: Выделить весь код
PS Import-Csv 1.csv -Delimiter ";" | Group {"{0} {1}. {2}" -f $_.Имя,$_.Отчество[0],$_.Фамилия} | Where{ $_.Count -eq 1}

Count Name                      Group
----- ----                      -----
    1 Адексааа А. Бульба        {@{Фамилия=Бульба; Имя=Адексааа; Отчество=Алибабаевич; ТН=0009876543; ДР=19.02.1966;...
4) $name = $_.Name - Будет содержать Адексааа А. Бульба(текущий элемент в конвейере)
5) $sam = (Get-ADUser -Filter "DisplayName -eq '$name'").SamAccountName - Производим поиск в AD и пробуем получить свойство SamAccountName
6) Дальше, случайно , добавил лишнюю проверку. if(Get-ADUser -Filter "DisplayName -eq '$name'") - Достаточно if($sam)
7) $_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue $sam -PassThru - Добавляем новое свойство к объекту

Код: Выделить весь код
$result = Import-Csv users.csv -Delimiter ";" | 
	Group {"{0} {1}. {2}" -f $_.Имя,$_.Отчество[0],$_.Фамилия} | Where {$_.Count -eq 1} | Foreach {
		$name = $_.Name
		$sam = (Get-ADUser -Filter "DisplayName -eq '$name'").SamAccountName
		if($sam) {
			$_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue $sam -PassThru
		}
		else {
			$_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue "" -PassThru
		}
	}
Код: Выделить весь код
PS > $result

Фамилия         : Иванов
Имя             : Иван
Отчество        : Иванович
ТН              : 0009876543
ДР              : 19.02.1966
СНИЛС           : 888-777-666 55
Организация     : ООО "Рога и копыта"
Подразделение   : Бухгалтерия
Должность       : шредерщик
Дата приема     : 08.07.2000
Дата увольнения :
SamAccountName  : iivanov
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:18, 29-01-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сопоставление сотрудников из 1С учетным записям в AD

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Задача по учетным записям JustMAXIM@twitter Microsoft Windows 2000/XP 1 06-03-2012 19:46
Любой язык - [решено] Применение твиков реестра ко всем учетным записям после установки ОС Windows 7 SANIOK_AV Скриптовые языки администрирования Windows 1 16-09-2011 15:33
CMD/BAT - [решено] переименовать и поставить пароль учетным запиясям из командной строки? super_bitard Скриптовые языки администрирования Windows 5 13-04-2011 10:51
Применение твиков реестра ко всем учетным записям im9 Автоматическая установка Windows 2000/XP/2003 1 24-12-2010 19:09
Вопросы по учетным записям. babki Microsoft Windows NT/2000/2003 2 21-12-2007 09:43




 
Переход