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

Компьютерный форум 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

 

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


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

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


Kazun, спасибо за подробные комментарии.
Но возникла одна проблема: на контроллере домена не установлены веб-службы AD. Возможно заменить командлет Get-ADUser на Get-QADUser?

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



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

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


Ветеран


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

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


Конечно возможно:
Код: Выделить весь код
(Get-QADUser -DisplayName $name).SamAccountName
Это сообщение посчитали полезным следующие участники:

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


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


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

Профиль | Отправить 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
Благодарности: 861

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


Использовал версию V3,для V2:
Код: Выделить весь код
$_.Group | Add-Member -MemberType NoteProperty -Name SamAccountName -Value $sam -PassThru
Это сообщение посчитали полезным следующие участники:

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


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


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

Профиль | Отправить 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
Благодарности: 1

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


Kazun, еще раз спасибо за помощь в решении.
Но если не сложно, то, так сказать "для расширения кругозора" подскажи, как выглядел бы скрипт, если бы не требовалось очищать выгрузку от неуникальных записей "Имя О. Фамилия", но поиск в AD осуществлялся бы только для уникальных записей "Имя О. Фамилия"?

Отправлено: 09:36, 30-01-2014 | #16


Ветеран


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

Профиль | Отправить 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
Благодарности: 1

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


Kazun, ну и последний гипотетический вопрос: как можно организовать поэтапную работу скрипта, на каждом этапе обрабатывая записи с фамилиями только на одну букву (А, Б, В...) из единого файл-источника?

Отправлено: 08:49, 31-01-2014 | #18


Ветеран


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

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


Делайте двойное группирование.
Код: Выделить весь код
$data  = Import-Csv $path\users.csv -Delimiter ";"
$al = $data | Group {$_.LastName[0]} | Sort Name

Отправлено: 09:06, 31-01-2014 | #19


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


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

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


Kazun,
Цитата Kazun:
Делайте двойное группирование. »
Можно немного поподробнее? Я не понял, как это реализуется.

Отправлено: 09:27, 31-01-2014 | #20



Компьютерный форум 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




 
Переход