[Q&A] Создаем личные сайты с помощью PowerShell

Q: Возникают конфликты при попытке создать личный сайт пользователя, так как адрес уже занят.

A: Для решения данной проблемы можно использовать настройки службы профилей пользователей (рис. 1)

image
Рис. 1. Настройки формата именования личных сайтов

В большинстве случаев этого должно быть достаточно. И это никак не поможет, если имеет место переименование логинов пользователей в AD.

В этом случае лучше использовать свой механизм для создания личных сайтов. Смысл этого механизма состоит в том, что вместо метода UserProfile.CreatePersonalSite нужно использовать создание сайта на основе нужно шаблона. Анализ стандартных сборок показал, что используется шаблон SPSPERS#0.

Add-PSSnapin "Microsoft.SharePoint.PowerShell"

$personalSiteTemplate = Get-SPWebTemplate "SPSPERS#0"
$site = new-object Microsoft.SharePoint.SPSite($siteUrl);
$serviceContext = [Microsoft.SharePoint.SPServiceContext]::GetContext($site);

#Get UserProfileManager from the My Site Host Site context
$profileManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext)
$AllProfiles = $profileManager.GetEnumerator()

foreach($profile in $AllProfiles)
{
	$DisplayName = $profile.DisplayName
	$accountName = $profile["AccountName"].Value
	$SplitUserName = ($accountName.Split("\")[1])

	if($profile.PersonalSite -eq $null)
	{
		$unique = $false
		$personalSiteURL = $siteUrl + "/personal/" + $SplitUserName
		$tempPersonalSiteUrl = $personalSiteURL;

        $i = 0

        while ($unique -ne $true)
        {
        	$unique = (Get-SPWeb $tempPersonalSiteUrl -ErrorAction SilentlyContinue) -eq $null
            if ($unique -ne $true)
            {
                #Url already exists
                $i++;
                $tempPersonalSiteUrl = $personalSiteURL + $i;
            }
        }

        $personalSiteURL = $tempPersonalSiteUrl

        New-SPSite -Name $DisplayName -Url $personalSiteURL -OwnerAlias $accountName -Template $personalSiteTemplate

        #Setting value for profile property "PersonalSpace"
        $personalSiteURLProperty = $personalSiteURL.Substring($personalSiteURL.IndexOf("/personal"))
        $profile["PersonalSpace"].Value = $personalSiteURLProperty
        $profile.Commit()
	}
}

Ссылки

UserProfile.CreatePersonalSite Method

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s