Как я рассказывал ранее, у меня есть список, в котором находятся
перечень сотрудников компании. Мне надоело создавать новые элементы руками самостоятельно,
и решил прибегнуть к PowerShell.
Т.к. в моей компании первично заводят данные в учетную систему,
далее создается пользователь в AD,
то я попросил коллег, что бы мне выгружали всех новых сотрудников в файл. Полученный
файл я импортировал в PowerShell,
и уже работал с массивом из пользователей.
Расскажу подробней о своем способе решения:
при импорте получаем
2. Полученный массив пробегаем
циклом и если элемент массива не пуст, то для него запускаем проверку на
существование карточки в списке Сотрудники.
3. Проверка
на существование карточки для пользователя происходит следующим образом, у меня
в карточке сотрудника есть поле «Пользователь» в котором указан пользователь SharePoint. И если в списке нет
элементов с проверяемыми учетными данными, то создаем новый элемент.
4. Создание нового элемента, при
этом сразу заполняются основные данные сотрудника (Фамилия, Имя, Отчество,
Инициалы)
так на выходе
Cам скрипт:
if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell;} #добавляем снапин SP
function ImportFile ($path)
{
$import = Import-Csv -Delimiter "`t" -Path $path # импортируем файл
foreach($importUser in $import)
{
if ($importUser.login -ne "") #проверяем что элемент массива не пуст
{
CheckItemUserList $importUser
}
}
}
function CheckItemUserList ($checkUser) # проверяем сколько записей с таким пользователем есть
{
$web = Get-SPWeb $urlWeb
$list = $web.Lists[$nameList]
$items = $list.Items
$countItem = 0
foreach ($item in $items)
{
#$item["SystemUser"].ToString();
$userfield = New-Object Microsoft.SharePoint.SPFieldUserValue($web,$item["SystemUser"].ToString());
if ($userfield.User.UserLogin -eq $checkUser.Login)
{
$countItem = $countItem + 1
}
}
Write-Host "Количество записей с логином" $checkUser.Login - $countItem -ForegroundColor Blue
if ($countItem -eq 0)
{
AddItemUserList $checkUser
}
else
{
$web.Dispose()
}
}
function AddItemUserList ($addImportUser)
{
#развиваем ФИО на имя, фамилию отчество и формируем инициалы
$split = $addImportUser.name -split " "
$lastname = $split[0]
$firstname = $split[1]
$middleName = $split[2]
$initials = $split[1].substring(0,1) + "." + $split[2].substring(0,1) +"."
# Вот в этом блоке нужно произвести замену на свои названия полей которые находятся в []
$addItem = $list.AddItem()
$addItem['Title'] = $lastname + " " + $initials
$addItem['LastNamePhonetic'] = $lastname
$addItem['FirstName'] = $firstname
$addItem['MiddleName'] = $middleName
$addItem['Initials'] = $initials
$addItem['SystemUser'] = $web.EnsureUser($addImportUser.login);
$addItem.Update()
Write-Host "Элемент с именем " $lastname $initials "создан." -ForegroundColor Green
$web.Dispose()
}
$pachFile = 'C:\export\importUserList.txt' #заменить на путь файла
$urlWeb = 'http://site' #заменить на адрес сайта
$nameList = 'Подразделения и сотрудники' #заменить название списка
ImportFile ($pachFile)
Как пользоваться:
по мимо того что нужно заменить 3 нижние переменные на Ваши, так еще придется поменять название полей списка, в которые будут записываться данные. Как совет, использовать имена полей на латинице.
Комментариев нет:
Отправить комментарий