目前最新版本的 Windows Server 2016 Azure VM 無法安裝中文語言套件,透過 PowerShell 來測試和避開
先說結論好了「 目前最新版本 Windows Server 2016 Azure VM (2021/05) 無法安裝中文語言套件,因此我們需要透過 PowerShell 或 CLI 選擇舊版本的 Image,才可以使用中文語言套件」
話說這件事情的開始,本來是朋友詢問有關於如何比較經濟的來建立備援的環境,因此在了解他們的需求之後,建議他們可以使用 Azure VM 來使用,因此請他們可以先參考之前所寫的一篇文章「透過 PowerShell 快速大量的建立 VM」。本來想說應該萬無一失,但沒有想到朋友反映說 Windows Server 2016 沒有辦法安裝中文套件,因為他們的系統需要在繁體中文的環境下來執行,導致無法來使用 ?! 當下聽到的時候,會想說是不是朋友不會安裝,還是臨時無法下載到語言包導致問題,因此就想說協助一下,用 lpksetup 來安裝,這下應該沒有問題吧,但事情總不能如人願:(
一開始當我執行 lpksetup 來安裝,看起來都還蠻順利的
在等了 10 多分鐘之後,沒有想到居然會出現「失敗」!!!
另外從系統的事件檢視器也可以看到如下的錯誤訊息,並沒有太多幫助知道哪裡出問題。而從上面的 Keyword 去找相關的資料,所找到的相關文章也都沒有任何幫助
因為之前已經安裝上百個以上的 VM ,都沒有類似的情況,因此想說寫一個 Script 來建立測試環境,看看是不是因為新版本的 Image 所導致的問題,因此我先用以下的語法透過 Cloud Shell 的介面來查詢看看,可以使用的 Windows Server 2016 的影像檔有哪些
Get-AzVMImage -Location "EastAsia" -PublisherName "MicrosoftWindowsServer" -Offer "windowsserver" -Skus "2016-Datacenter" | Format-Table -Property Offer,Skus,Version
從下圖中可以看出來有不少,特別是今年似乎每個月就有一個新的影像檔案出來,因此我決定拿最後面四個來測試
因此我改了一下之前建立的 PowerShell 語法,改成以下的方式,這樣子我就可以建立好四個不同版本的 VM
$resourceGroup = "LPTest" # 資源群組
$location = "EastAsia" # 區域
$name = "LPLab" # VM 名稱
$vmadmin = "vmadmin" # Admin 帳號
$pwd='Pa$$w5rd3939889'| ConvertTo-SecureString -Force -AsPlainText # Admin 密碼
$Version = "14393.4225.2102030345","14393.4283.2103051830","14393.4350.2104091630","14393.4402.2105052108"
$cred=New-Object PSCredential($vmadmin,$pwd)
# 建立資源群組
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location
# 建立可允許連線規格
$rdpRule = New-AzNetworkSecurityRuleConfig -Name rdp-rule -Description "Allow RDP" `
-Access Allow -Protocol Tcp -Direction Inbound -Priority 100 `
-SourceAddressPrefix Internet -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange 3389
# 建立網路安全群組
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup `
-Location $location -Name $resourceGroup"-nsg" -SecurityRules $rdpRule
# 建立子網路
$subnet = New-AzVirtualNetworkSubnetConfig -Name $resourceGroup"-vmSubnet" `
-AddressPrefix "10.0.1.0/25" -NetworkSecurityGroup $nsg -WarningAction SilentlyContinue
# 建立虛擬網路網路
$vnet = New-AzVirtualNetwork -Name $resourceGroup"-vnet" -ResourceGroupName $resourceGroup `
-Location $location -AddressPrefix "10.0.1.0/24" -Subnet $subnet `
-WarningAction SilentlyContinue
for($i = 1; $i -le $Version.count ; $i++)
{
$vmname = $name + ([string]$i).PadLeft(2,'0')
# 產生公用 IP , 網域名稱要用小寫
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
-Name $vmname"-ip" -AllocationMethod Static -DomainNameLabel $vmname.toLower()
# 產生虛擬網卡
$nic = New-AzNetworkInterface -ResourceGroupName $resourceGroup -Location $location `
-Name $vmname"-nic" -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id
# 建立虛擬機器的相關設定
$vmConfig = New-AzVMConfig -VMName $vmname"-vm" -VMSize Standard_DS2_V2
$vmConfig | Set-AzVMOperatingSystem -Windows -ComputerName $vmname -Credential $cred -TimeZone "Taipei Standard Time"
$vmConfig | Set-AzVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version $Version[$i-1]
$vmConfig | Add-AzVMNetworkInterface -Id $nic.Id
$vmConfig | Set-AzVMBootDiagnostic -Disable
$vmConfig | Set-AzVMOSDisk -Name $vmname"-osdisk" -Caching ReadWrite -StorageAccountType "Standard_LRS" -CreateOption FromImage
# 建立虛擬機器並放置到背景執行
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig -AsJob
}
Get-Job
以上我整理一下建立好的 VM,並且透過 Winver 取得相關資訊,並且測試安裝中文語言包的狀況
名稱 | LPLab01 | LPLab02 | LPLab03 | LPLab04 |
---|---|---|---|---|
影像檔版本 | 14393.4225.2102030345 | 14393.4283.2103051830 | 14393.4350.2104091630 | 14393.4402.2105052108 |
Winver | Version 1607 | Version 1607 | Version 1607 | Version 1607 |
OS Build | 14393.4225 | 14393.4283 | 14393.4350 | 14393.4402 |
中文語言包 | 成功 | 成功 | 失敗 | 失敗 |
從上表中可以看出來,在 2021/04 之後所使用的影像檔,安裝中文語言包是失敗的,因此如果您有需要使用中文的話,建議可以改用 Windows 10 或者是 Windows Server 2019 的影像檔,但如果要用 Windows Server 2016 的話,建議可以改用 14393.4283.2103051830 這一個版本的,只是您可能無法透過 Azure Portal 的介面去找到那個影像檔來安裝,就需要自己手動修改我前面的範例,用 PowerShell 來建立 VM ,這樣就可以順利安裝了。
2021/05/31 看來這個問題遇到的還不少人,剛好在測試其他的問題的時候 , 有看到網路上一個朋友 icka's Home 也遇到這個問題 ( 網址 ) , 透過他的方式進入到 Guest VM 裡面 , 利用 system internals 的工具程式 movefile , 將 C:\Windows\System32\config\TxR 的目錄下的檔案都清除 , 就可以順利安裝上 Language Pack 了,如果有朋友遇到類似問題 , 可以參考他的文章 , 就可以順利解決了。
2021/06/21 最近又再度測試 , 現在可以使用的 Image 版本已經是 14363.4467 , 微軟已經修正這個問題了。