Donnerstag, 5. November 2015

Powershell Scripts - automatisch persönliche mySites erstellen

In bestimmten Szenarien kann es Sinn machen, Teile der mySite Funktionen zu nutzen ohne die mySite selbst zur Verfügung zu stellen.

Man stelle sich zum Beispiel eine persönliche Favoriten Funktion für Dokumente oder Websites vor. Mit Hilfe der Standardfunktion "Follow" kann ein Nutzer sehr einfach einem Dokument oder z.B. einer Website folgen. Die gefolgten Inhalte kann man dann wiederum sehr einfach in einem Webpart darstellen und so z. B. als "Favoriten" auf einer Startseite darstellen, ohne die ganze mySite Funktion freischalten zu müssen.

Voraussetzung hierfür ist allerdings, dass die entsprechenden Benutzer eine persönliche mySite haben. Da diese aber normalerweise in dem Moment in dem der Nutzer zum ersten Mal auf den mySite Link klickt erstellt werden, benötigt man eine Funktion die dies im Hintergrund durchführt.

Wie so oft hilft hier ein kleines Powershell Script, welches man z. B. über einen Timer Job oder einen Scheduled Task regelmäßig anstoßen kann. Das folgende Script holt sich in einer Schleife alle User und legt für diese dann ggfs. eine persönliche mySite an. Die ersten drei Zeilen müssen hierbei an das SharePoint angepasst werden.

$mysiteHostUrl = "https://URL DES MYSITE HOST"
$personalSiteGlobalAdmin = "USERNAME ADMIN"
$personalSiteGlobalAdminNot ="EMAILADRESSE ADMIN"
$personalSiteGlobalAdminDisplayName = "FarmAdmin"
$mysite = Get-SPSite $mysiteHostUrl
$context = [Microsoft.Office.Server.ServerContext]::GetContext($mysite)
$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
$AllProfiles = $upm.GetEnumerator()
foreach($profile in $AllProfiles){
$DisplayName = $profile.DisplayName
$AccountName = $profile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]
::AccountName].Value
if($profile.PersonalSite -eq $Null){
write-host "Creating personel site for ", $AccountName
$profile.CreatePersonalSite()
#Adding an extra admin for personel sites
$pweb = $profile.PersonalSite.OpenWeb()
$pweb.AllUsers.Add($personalSiteGlobalAdmin,$personalSiteGlobal
AdminNot,$personalSiteGlobalAdminDisplayName,$null);
$padm= $pweb.AllUsers[$personalSiteGlobalAdmin];
$padm.IsSiteAdmin = $true;
$padm.Update();
$pweb.Dispose();
write-host "Personal Site Admin has assigned"
}
else
{
write-host $AccountName ," has already personal site"}
}
$mysite.Dispose(); 

1 Kommentar: