This project has moved and is read-only. For the latest updates, please go here.

Including Language Packs and hotfix.

Mar 23, 2011 at 12:04 PM
Edited May 13, 2011 at 11:19 AM

Updated (rewritten)  13 mei 2011,


We prefer a slipstream of updates above running a update after installation.


In our installation we use English SharePoint 2010 and 2 language packs: Dutch and German.

If we follow the instructions for AutoSPInstaller we can not slipstream “the SharePoint Server 2010 cumulative update package (MOSS server-package)” on the language packs.


Therefore we extracted the language packs in the directory’s “\LanguagePacks\xx-xx”

In the new structure there is “setup.exe” and a subfolder “Updates” for each language.


To slipstream one of the “cumulative update package” (eg. kb2459257; kb 2475878; kb 2512800 or newer version) we extract the package to all the “Updates” subfolders.

Note 1: use only one package, do not merge.

Note 2: do not use the foundation update on the server version.

In our case we have to place the updates 3 times in our installation point: once for the SharePoint binaries and twice for the language packs.




Next step is not to use the original “Func: Install Language Packs

Instead we rebuild the function to call for the two setup.exe files (nl-nl and de-de)

The code is at the end.


In this way all the software is installed including the “Updates or cumulative Hotfixes”.


thanks to Marco



code example:


#Region Custom Install Language Packs

# ===================================================================================

# Func: Install Language Packs

# Desc: Install language packs and report on any languages installed

# ===================================================================================

Function Custom-InstallLanguagePacks([xml]$xmlinput)



   #Look for Server language packs

   $LangPacksFolders = Get-Childitem "$bits\LanguagePacks" | ?{$_.PSIsContainer -eq $true}

   $LanguageSetupfiles = $LangPacksFolders | %{Get-ChildItem $_.FullName -include "setup.exe" -recurse}

   If ($LanguageSetupFiles)


     Write-Host -ForegroundColor White " - Installing SharePoint (Server) Language Packs:"

     #Get installed languages from registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\14.0\InstalledLanguages)

       $InstalledOfficeServerLanguages = (Get-Item "HKLM:\Software\Microsoft\Office Server\14.0\InstalledLanguages").GetValueNames() | ? {$_ -ne ""}


     #Another way to get installed languages, thanks to Anders Rask (@AndersRask)!

     ##$InstalledOfficeServerLanguages = [Microsoft.SharePoint.SPRegionalSettings]::GlobalInstalledLanguages


     ForEach ($LanguagePack in $LanguageSetupFiles)


           #Slightly convoluted check to see if language pack is already installed, based on name of language pack file.

           # This only works if you've named your language pack(s)folders to follow the convention "LanguagePacks\xx-xx\" where <XX-XX> is a culture such as <en-us>.

           $CurrentLanguage = $LanguagePack | %{Split-Path $_ -Parent} | %{Get-Item $_} | Select-Object BaseName

           $LangInstalled = $InstalledOfficeServerLanguages | ?{$_ -eq $CurrentLanguage.BaseName}

           If (!$LangInstalled)


                 $currFolder = $LanguagePack | %{Split-Path $_ -Parent} | %{Get-Item $_} | Select-Object FullName

                        Write-host -ForegroundColor Yellow

            Write-Host -ForegroundColor Yellow " - Installing $LanguagePack..." -NoNewline

            Start-Process $LanguagePack -ArgumentList "/config $($currFolder.FullName)\Files\SetupSilent\config.xml" -wait




               Write-Host -ForegroundColor White " - Language $Language already appears to be installed, skipping."



     Write-Host -ForegroundColor White " - Language Pack installation complete."




       Write-Host -ForegroundColor White " - No language packs found in $bits\LanguagePacks, skipping."



   # Get and note installed languages

   $InstalledOfficeServerLanguages = (Get-Item "HKLM:\Software\Microsoft\Office Server\14.0\InstalledLanguages").GetValueNames() | ? {$_ -ne ""}

   Write-Host -ForegroundColor White " - Currently installed languages:"

   ForEach ($Language in $InstalledOfficeServerLanguages)


     Write-Host " -" ([System.Globalization.CultureInfo]::GetCultureInfo($Language).DisplayName)




Apr 13, 2011 at 3:00 PM

The latest version of the cumalitive update (office2010-kb2475878-fullfile-x64-glb.exe) now includes all languages, so I believe this workaround is no longer necessary? At least it seemed to work fine for me.

May 8, 2011 at 4:04 AM

Also, I don't think you need Foundation updates at all with the full Server product (only Server updates), and if you overwrite the Server updates with the Foundation updates that might cause problems. Not sure if this applies to your scenario.