SharePoint Benutzer-Spracheinstellungen mit PowerShell setzen.

Ich falle immer mal wieder darüber: Wie kann man für alle Benutzer die Spracheinstellungen per PowerShell setzen?

Die Frage ist schnell beantwortet und eine kurze Suche führt meistens etwas wie das folgende zutage:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles")
$ctx = [Microsoft.Office.Server.ServerContext]::GetContext((Get-SPWebApplication | Select -First 1))
$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager -ArgumentList @($ctx)
$lang = "de-DE,en-US"
$enum = $upm.GetEnumerator()
while ($enum.MoveNext()) {
$up = $enum.Current
write-host "$($up.DisplayName) ($($up.AccountName))"
$up["SPS-MUILanguages"].Value = $lang
$up["SPS-ContentLanguages"].Value= $lang
$up.Commit()
}

Meistens sieht dann in der Zentraladministration alles gut aus:

In der MySite sieht meistens alles gut aus

Aber für “einige” (oder auch alle…) Benutzer erscheinen die Werte dann nicht in den MySites:

manchmal jedoch nicht...

Das “Geheimnis” ist ein TimerJob (“User Profile Service Application_LanguageAndRegionSync”) der allerdings nur richtig arbeitet, wenn die eigenschaft ‘SPS-RegionalSettings-Initialized‘ auf true gesetzt ist. Im Standard läuft dieser Job jede Minute – ein Start, direkt nach der Anpassung kann aber auch nicht schaden.
Das Finale Skript muss also so aussehen:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles") | out-null
$ctx = [Microsoft.Office.Server.ServerContext]::GetContext((Get-SPWebApplication | Select -First 1))
$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager -ArgumentList @($ctx)
$lang = "de-DE,en-US"
$enum = $upm.GetEnumerator()
while ($enum.MoveNext()) {
$up = $enum.Current
write-host "$($up.DisplayName) ($($up.AccountName))"
$up["SPS-MUILanguages"].Value = $lang
$up["SPS-ContentLanguages"].Value= $lang
$up["SPS-RegionalSettings-Initialized"].Value = $true
$up.Commit()
}
Get-SPTimerJob | ?{ $_.Name -like "*user*profile*languageandregion*" } | %{ $_.RunNow() }

Danach erscheinen auch die Anpassungen in der MySite:

Die Spracheinstellungen sind in der MySite ersichtlich

Was gibt es noch dazu zu sagen?

  • Die Sprach-codes müssen “korrekt” sein – also “de-DE” nicht “de-de“.
  • Der Text darf keine leerzeichen enthalten – also “de-DE,en-US“, nicht “de-DE, en-US

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.