PowerShell Script zum Ändern der Windows 10 Betriebssystemsprache und Spracheinstellungen für Benutzer incl. Auswahldialog auf Basis der installierten Sprachpakete (Language Packs)
# Get list of installed language packs
$OSInfo = Get-WmiObject -Class Win32_OperatingSystem
$languagePacks = $OSInfo.MUILanguages
# Helper function to get the GeoID from Cluture
Function Get-GeoId($Name='*')
{
$cultures = [System.Globalization.CultureInfo]::GetCultures('InstalledWin32Cultures')
foreach($culture in $cultures)
{
try{
$region = [System.Globalization.RegionInfo]$culture.Name
if($region.Name -like $Name)
{
$region.GeoId
}
}
catch {}
}
}
# Show select dialog with installed language packs
Function Show-LanguageSelectDialog {
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Computer'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please select a computer:'
$form.Controls.Add($label)
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,40)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 80
foreach ($item in $languagePacks)
{
[void] $listBox.Items.Add($item)
}
$form.Controls.Add($listBox)
$form.Topmost = $true
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $listBox.SelectedItem
$x
}
}
$Culture = Show-LanguageSelectDialog
# Change language to selection
Set-Culture -CultureInfo $Culture
Set-WinHomeLocation $(Get-GeoId($Culture))
Set-WinUserLanguageList $Culture -force
Write-host "Please logoff and logon again to activate the selected language"