Показаны сообщения с ярлыком PowerShell. Показать все сообщения
Показаны сообщения с ярлыком PowerShell. Показать все сообщения

вторник, 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" чтобы строки не обрезались.

вторник, 2 декабря 2014 г.

SharePoint. System.ArgumentException: calType

В процессе использования SharePoint 2013 коллега поправил себе профиль, добавив дополнительные языки:


Установлен Service Pack 1, а English Language Pack - нет.
Сразу же после применения изменений на всех страницах появлялась ошибка:

Пробовал через PowerShell скопировать поля из работающего профиля в сломанный, это не дало результат.
Исправить удалось удалением профиля, используя PowerShell:
if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
{
    Addd-PSSnapin "Microsoft.SharePoint.PowerShell"
}
[void][reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server");     
$site=new-object Microsoft.SharePoint.SPSite("http://portal");            
$serviceContext = Get-SPServiceContext $site;            
$site.Dispose();            
$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext);
$upm.RemoveUserProfile("Domain\Account");
Хотя это можно сделать через веб-интерфейс.
Потом на всякий случай удалил пользователя из user information list, для этого я использовал SharePoint End User Viewer Tool, таким образом проблема была решена.

Но ошибка может сохраняться, если пользователь присутствует на других коллекциях.
Это происходит из-за того, что каждая коллекция сайтов имеет свой список сведений о пользователях. Коллекций может быть очень много. Например, из-за личных сайтов.
Чтобы автоматически удалить из всех коллекций - воспользуйтесь скриптом ниже:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$UserLogin = "i:0#.w|domain\login";
$Sites = Get-SPSite -Limit All
$AllSites = @()

foreach($Site in $Sites)
{
    $RootWeb = $Site.RootWeb
    If([bool](Get-SPUser -Identity $UserLogin -Web $RootWeb -EA SilentlyContinue) -eq $True)
    {
        $User = Get-SPUser -Identity $UserLogin -Web $RootWeb
        Write-Host ("Удален из " + $RootWeb.Url)
        Remove-SPUser -Identity $User -Web $RootWeb -Confirm:$False
        $AllSites += $RootWeb.Url
    }
    else
    {
        Write("Отсутствует на: " + $RootWeb.Url)
    }
}

if(!($AllSites).count -eq 0)
{
    Write-Host "Removed user $($UserLogin) from:" -Fore "Magenta"
    foreach($S in $AllSites){Write-Host “- $S”}
    Write-Host ""
    $AllSites = @()
}

вторник, 8 июля 2014 г.

Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт)


При попытке сохранить сайт в качестве шаблона можно увидеть ошибку:
Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт).
Для того, что бы обойти ограничение - достаточно выполнить PowerShell скрипт ниже:

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
$ContentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ContentService.MaxTemplateDocumentSize = 524288000
$ContentService.Update()

Теперь лимит 500 Мб, это максимальное значение. Вести выше не получится:
Если Ваш сайт занимает < 500 Мб, то Вы увидете следующее:

пятница, 23 мая 2014 г.

Ошибка Office Web App 2013 после установки обновлений

Столкнулся с проблемой, возникает ошибка при открытии документы через OWA:
Выяснил какое обновление к этому приводит:

Делал несколько установок, восстанавливался из снэпшотов Hyper-V. Сейчас они называются Checkpoints:
На данный момент проблему можно решить пересозданием фермы, а можно сразу установить еще обновления:
При этом ошибка так же пропала только после переустановки фермы Office Web App. Для этого сначала надо выполнить команду PowerShell:
Remove-OfficeWebAppsMachine
Потом создать новую ферму, параметры могут быть другими:
New-OfficeWebAppsFarm -InternalURL "http://owa.domain.com" -EditingEnabled -AllowHttp
Установка последних обновлений так же решила проблему, когда появлялась ошибка:


Желательно обновить привязки на стороне фермы SharePoint, но не обязательно.
Все проблемы исчезли: