вторник, 31 мая 2016 г.

SharePoint. Вывод всех полей UPSA используя Powershell

Ниже представлен небольшой скрипт для вывода основных полей из User Profile Service Application. Помимо тривиального перебора свойств Microsoft.Office.Server.UserProfiles.UserProfileManager, стоит отметить наличие столбца, в котором указано привязанное поле в Active Directory и направление синхронизации. Так же есть небольшая особенность вывода значений в файл.

# Почистить вывод
cls
# Получить оснастку
Add-PSSnapin "Microsoft.SharePoint.PowerShell"
# Указываем имя подключения (имя можно посмотреть по адресу:http://CA:port/_layouts/15/mgrdsserver.aspx?ApplicationID={GUID})
$connectionName = "MyConnectionName"
# Адрес коллекции
$siteUrl = "http://server:port"
# Получаем коллекцию
$site = Get-SPSite $mySiteUrl
# Получаем SPServiceContext
$context = Get-SPServiceContext $site
# Получаем все необходимые объекты
$profileConfigManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($context)
$syncConnection = $profileConfigManager.ConnectionManager[$connectionName]
$profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
$propertyList = New-Object System.Collections.Generic.List[System.Object]
# Формируем список
foreach ($p in $profileManager.properties) 
{    
    $propertyObject = New-Object PSObject
    # Системное имя
    $propertyObject | Add-Member Name $p.Name
    # Отображаемое имя
    $propertyObject | Add-Member DisplayName $p.DisplayName
    # Переводы на интересующие языки (Ru)
    $propertyObject | Add-Member LocalRU $p.DisplayNameLocalized[1049]
    # Переводы на интересующие языки (En)
    $propertyObject | Add-Member LocalEN $p.DisplayNameLocalized[1033]
    # Тип  
    $propertyObject | Add-Member Type $p.Type
    # Размер поля
    $propertyObject | Add-Member Length $p.Length
    # Синхронизируемое поле в АД
    $pm = $syncConnection.PropertyMapping[$p.Name]
    $propertyObject | Add-Member PropertyNameAD $pm.DataSourcePropertyName
    # Направление синхронизации   
    $propertyObject | Add-Member IsImportFromAD $pm.IsImport 
    # Обязательность
    $propertyObject | Add-Member IsRequired $p.IsRequired
    # Параметр конфиденциальности 
    $propertyObject | Add-Member DefaultPrivacy $p.DefaultPrivacy
    # Возможность переопределения конфиденциальности
    $propertyObject | Add-Member UserOverridePrivacy $p.UserOverridePrivacy
    # Возможность изменения пользователем
    $propertyObject | Add-Member IsUserEditable $p.IsUserEditable
    # Отображение на странице просмотра
    $propertyObject | Add-Member IsVisibleOnViewer $p.IsVisibleOnViewer
    # Отображение на форме изменения
    $propertyObject | Add-Member IsVisibleOnEditor $p.IsVisibleOnEditor
    # Индексация (в смысле доступен для поиска)
    $propertyObject | Add-Member IsSearchable $p.IsSearchable
    # Добавить в список
    $propertyList.Add($propertyObject)   
}
# Выводим список на экран в отдельном окне в сетке
$propertyList | Out-GridView
# Выводим список в текстовый файл с заголовками 
$propertyList | Format-Table -Property * -AutoSize ` | Out-String -Width 4096 ` | Out-File C:\FileName.txt

Имя соединения можно посмотреть в настройках UPSA, там может быть несколько соединений.



Обратите внимание на кусочек вывода в файл. Необходимо указывать "Out-String" чтобы строки не обрезались.