|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сопоставление сотрудников из 1С учетным записям в AD |
|
PowerShell - [решено] Сопоставление сотрудников из 1С учетным записям в AD
|
Новый участник Сообщения: 32 |
Прошу помочь по возможности в решении задачи:
Есть csv-выгрузка из 1С такого вида: Фамилия;Имя;Отчество;ТН;ДР;СНИЛС;Организация;Подразделение;Должность;Дата приема;Дата увольнения Пупкин;Василий;Алибабаевич;0009876543;19.02.1966;888-777-666 55;ООО "Рога и копыта";Бухгалтерия;шредерщик;08.07.2000 Учитывая, что в домене отчество обозначено только первым символом, а в выгрузке полностью, то возможны совпадения при сравнении, т.к. в выгрузке есть еще , например, сотрудник "Пупкин Василий Алексеевич". Необходимо очистить выгрузку от неуникальных в этом отношении записей, т.е. в данном случае удалить обоих Пупкиных, и дополнить очищенную выгрузку графой "samaccountname", заполнив ее соответствующими данными из AD (если есть). Все учетные записи в AD находятся в OU Domain\Сотрудники. CSV в win-кодировке. |
|
Отправлено: 11:32, 28-01-2014 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun, спасибо за подробные комментарии.
Но возникла одна проблема: на контроллере домена не установлены веб-службы AD. Возможно заменить командлет Get-ADUser на Get-QADUser? |
Отправлено: 09:36, 29-01-2014 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 09:38, 29-01-2014 | #12 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun, спасибо за подсказку.
Я отказался от русских имен в заголовках: было Фамилия;Имя;Отчество;ТН;ДР;СНИЛС;Организация;Подразделение;Должность;Дата приема;Дата увольнения стало LastName;Name1;Name2;ID;Birthday;SNILS;Organization;Department;Role;Employment;Dismissal Выполняю вот такой скрипт: cls $path="d:\_ps\1s-AD" $result = Import-Csv $path\users.csv -Delimiter ";" | Group {"{0} {1} {2}" -f $_.Name1,$_.Name2[0],$_.LastName} | Where {$_.Count -eq 1} | Foreach { $name = $_.Name $sam = (Get-QADUser -DisplayName $name).SamAccountName if($sam) { $_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue $sam -PassThru } else { $_.Group | Add-Member -NotePropertyName SamAccountName -NotePropertyValue "" -PassThru } } $result|export-csv $path\filtered-users.csv -Delimiter ";" -Encoding Default Add-Member : Не удается найти параметр, соответствующий имени параметра "NotePropertyName". D:\_ps\1s-AD\0.ps1:11 знак:43 + $_.Group | Add-Member -NotePropertyName <<<< SamAccountName -NotePropertyValue "" -PassThru + CategoryInfo : InvalidArgument: (:) [Add-Member], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.AddMemberCommand Export-Csv : Не удается привязать аргумента к параметру "InputObject", так как он имеет значение NULL. D:\_ps\1s-AD\0.ps1:14 знак:19 + $result|export-csv <<<< $path\filtered-users.csv -Delimiter ";" -Encoding Default + CategoryInfo : InvalidData: (:) [Export-Csv], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCsvCommand |
Отправлено: 11:01, 29-01-2014 | #13 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:05, 29-01-2014 | #14 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun,
Не успеваю за прогрессом! ![]() А по существу: огромное спасибо за помощь! Небольшое дополнение: для корректного поиска нужна была точка после инициала отчества тут: Group {"{0} {1}. {2}" -f $_.Name1,$_.Name2[0],$_.LastName} | Where {$_.Count -eq 1} | Foreach { Итоговый скрипт: cls $path="d:\_ps\1s-AD" $result = Import-Csv $path\users.csv -Delimiter ";" | Group {"{0} {1}. {2}" -f $_.Name1,$_.Name2[0],$_.LastName} | Where {$_.Count -eq 1} | Foreach { $name = $_.Name $sam = (Get-QADUser -DisplayName $name).SamAccountName if($sam) { $_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value $sam -PassThru } else { $_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value "" -PassThru } } $result|export-csv $path\filtered-users.csv -Delimiter ";" -Encoding Default |
Последний раз редактировалось IvanXXL, 29-01-2014 в 11:35. Причина: Добавил итоговый скрипт (для Powershell v2) Отправлено: 11:32, 29-01-2014 | #15 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun, еще раз спасибо за помощь в решении.
Но если не сложно, то, так сказать "для расширения кругозора" подскажи, как выглядел бы скрипт, если бы не требовалось очищать выгрузку от неуникальных записей "Имя О. Фамилия", но поиск в AD осуществлялся бы только для уникальных записей "Имя О. Фамилия"? |
Отправлено: 09:36, 30-01-2014 | #16 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Group {"{0} {1}. {2}" -f $_.Name1,$_.Name2[0],$_.LastName} | Foreach { if($_.Count -eq 1) { $name = $_.Name $sam = (Get-QADUser -DisplayName $name).SamAccountName if($sam) { $_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value $sam -PassThru } else { $_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value "" -PassThru } } else { $_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value "неуникальный" -PassThru } } |
Отправлено: 09:41, 30-01-2014 | #17 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun, ну и последний гипотетический вопрос: как можно организовать поэтапную работу скрипта, на каждом этапе обрабатывая записи с фамилиями только на одну букву (А, Б, В...) из единого файл-источника?
|
Отправлено: 08:49, 31-01-2014 | #18 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 09:06, 31-01-2014 | #19 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Kazun,
Цитата Kazun:
|
|
Отправлено: 09:27, 31-01-2014 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - Задача по учетным записям | 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 |
|