|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Сравнение данных в строке csv-файла с данными из строки в списке SharePoint 2010 |
|
PowerShell - [решено] Сравнение данных в строке csv-файла с данными из строки в списке SharePoint 2010
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать
Добрый день. Меня зовут Никита, мне 26 и я
Возникла такая непростая (для меня) задачка: 1. Выгрузить список атрибутов некоторых пользователей из AD ---> *.csv 2. Подключиться с списку на SharePoint'e (Таблица, дублирующая *.csv-файл выше) 3. Построчно сравнить csv со списком. (в данном случае, уникальный идентификатор строки - атрибут EmployeeID) --> Файл csv - master, а список в SharePoint - slave. 3.1 Если в списке - нет строки, как в csv - то добавить её. 3.2 Если строка есть, проверить, все ли значения одинаковые, если нет, то записать в список как в csv. Вот, что у меня пока получилось : Выгрузка в csv: Get-ADUser -Filter {(ObjectClass -eq "user") -and (employeeID -like "*")} -Properties employeeID, 1, 2, 3 | sort-object -property Name | Select employeeID, 1, 2, 3 | Export-Csv D:\Contacts.csv -Encoding Unicode -NoTypeInformation C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -version 2.0 " & ' D:\to_list.ps1 ' " to_list.ps1 add-pssnapin microsoft.sharepoint.powershell $web = Get-SPWeb "http://SP/test" $list = $web.lists["Test_AD_Import_Export"] do {$list.items.delete(0)} until ($list.items.Count -eq 0) Import-Csv D:\Contacts.csv | ForEach-Object { $item = $list.items.Add() $item["employeeID"] = $_.employeeID $item["1"] = $_.1 $item["2"] = $_.2 $item["3"] = $_.3 $item.update() } Или у меня изначально алгоритм неверно выбран? Заранее спасибо за любой ответ ) |
|
Отправлено: 11:05, 17-07-2014 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Нашёл на форуме нечто похожее. Попробовал вот так :
$web = Get-SPWeb "http://SP/test" $list = $web.lists["Test_AD_Import_Export"] $items=$spList.Items $Information = Import-Csv "D:\Contacts.csv" -Delimiter ';' ForEach ($stroka in $Information){ ForEach ($item in $items){ if ($stroka.employeeID -eq $item["employeeID"]){ if ($item["1"] -eq $stroka.1){} else {$item["1"] = $stroka.1}} $item.update()}} отрабатывает, без ошибок. В списке в строке просто поле "1" - становится пустым. Что не так? ((( |
Отправлено: 15:07, 17-07-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Не тестировал, т.к. нет SharePoint:
$web = Get-SPWeb "http://SP/test" $list = $web.lists["Test_AD_Import_Export"] $items=$spList.Items $prop = Write-Output employeeID 1 2 3 $adusers = @{} $index = @() Get-ADUser -Filter {(ObjectClass -eq "user") -and (employeeID -like "*")} -Properties $prop | Foreach { $adusers[$_.employeeID] = $_ } # Обновляем данные или удалим запись, если нет в AD, но есть на листе foreach($item in $items) { $id = $item["employeeID"] $user = $adusers["$id"] $index += $id if($user) { $prop | Foreach { if ($user."$_" -ne $item["$_"]) { $item["$_"] = $user."$_" } } $item.update() } else { $item.delete() } } # Добавляем запись на лист Compare-Object ($adusers.GetEnumerator() | Foreach {$_.Name}) $index | Where {$_.SideIndicator -eq "<="} | Foreach { $user = $adusers["$($_.InputObject)"] $item = $list.items.Add() $prop | Foreach { $item["$_"] = $user."$_" } $item.update() } |
Отправлено: 15:40, 17-07-2014 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Для диагностики проверить переменную до и после изменения(и засечь время):
$adusers = @{} Get-ADUser -Filter {(ObjectClass -eq "user") -and (employeeID -like "*")} -Properties $prop | Foreach { $adusers[$_.employeeID] = $_ } $adusers["66666"] И если значения меняются, будем думать дальше. Возможно репликация влияет, т.к. между сайтами, как раз минимально возможное 15 минут. PS. По поводу книги, можно начать с - http://www.amazon.com/Learn-Windows-...5665469&sr=1-4 PSS. 1.hax0rz превысил(а) максимальный объем сохраненных персональных сообщений и не может получать новые сообщения, пока не удалит часть старых. |
Отправлено: 10:39, 18-07-2014 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Итак, получилось 2 варианта.
1. Импорт AD в csv и последующий импорт в список SP. 2. Импорт из AD напрямую в SP П.С.: Огромное спасибо пользователю Kazun. |
|
Отправлено: 10:43, 22-07-2014 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Добавление информации из csv-файла в AD с обработкой | IvanXXL | Скриптовые языки администрирования Windows | 12 | 23-07-2014 10:49 | |
CMD/BAT - [решено] Периеминование файла doc.csv в Документ_дата_время.csv | kagorec | Скриптовые языки администрирования Windows | 2 | 29-03-2014 18:40 | |
CMD/BAT - [решено] Сравнение папок из коммандной строки с логом | nbds | Скриптовые языки администрирования Windows | 5 | 24-10-2011 21:58 | |
Sharepoint - [решено] Sharepoint Server 2010: возможно ли встраивание данных о версии документа в его имя? | Ashtoret | Другие серверные продукты | 2 | 20-06-2011 09:37 | |
2010 - SharePoint 2010 – краткое сравнение обновленных функций | OSZone | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 25-03-2010 01:30 |
|