先日のアップデートで仮想マシンでカスタムスクリプトを実行して展開ができるようになりました。
カスタムスクリプトでは PowerShell が実行できるようなので仮想マシンを作成する際に日本語 UI を同時に設定するスクリプトを実行してみたいと思います。
基本的な内容は Azure VM の日本語 UI を PowerShell で設定 と同じです。
私の投稿は荒いですが、ぎたぱそさんの投稿でとても詳しく解説して下さっていますのでこちらもご参照いただければと思います。
AWS や Azure の英語UI をPowerShellで日本語UIにする
カスタムスクリプトの詳細をクリックすると Manage Extensions へリンクが貼られています。
カスタムスクリプトは拡張機能として実装されているようで、[C:PackagesPluginsMicrosoft.Compute.CustomScriptExtension1.0.1] のコンポーネントが使用されています。
このディレクトリにカスタムスクリプトして設定した内容が [scriptFile.ps1] としてコピーされ、ログが [status] フォルダの [0.status] に出力されているようです。
# ざっとしか見れていませんので違っていたらすみません…。
今回使用したスクリプトがこちらです。
param ( [parameter(mandatory = 1)] [ValidateSet("WindowsServer2012","WindowsServer2012R2","Windows8.1")] $OS, [parameter(mandatory = 1)] $AdminUser, [parameter(mandatory = 1)] $AdminPassword ) switch ($OS) { "WindowsServer2012" { $lpurl = "http://fg.v4.download.windowsupdate.com/msdownload/update/software/updt/2012/10" $lpfile = "windowsserver2012-kb2607607-x64-jpn_d079f61ac6b2bab923f14cd47c68c4af0835537f.cab" } "WindowsServer2012R2" { $lpurl = "http://fg.v4.download.windowsupdate.com/d/msdownload/update/software/updt/2013/09" $lpfile = "lp_3d6c75e45f3247f9f94721ea8fa1283392d36ea2.cab" } "Windows8.1" { $lpurl = "http://fg.v4.download.windowsupdate.com/d/msdownload/update/software/updt/2013/09" $lpfile = "lp_da2ecd336d37c67ffaf9158a8ba4d10c15b00abe.cab" } } $wintemp = "C:\Windows\Temp" $RunOncePath = "registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" $AutoLogonPath = "registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" a $runonce = @" tzutil.exe /s "Tokyo Standard Time" Set-WinUILanguageOverride ja-JP Set-WinSystemLocale 1041 Set-WinHomeLocation 0x7A Set-ItemProperty -Path "$AutoLogonPath" -Name "AutoAdminLogon" -Value "0" Remove-ItemProperty -Path "$AutoLogonPath" -Name "DefaultUserName" Remove-ItemProperty -Path "$AutoLogonPath" -Name "DefaultPassword" restart-computer -Force "@ Set-WinUserLanguageList ja-jp,en-US -Force Start-BitsTransfer -Source $lpurl/$lpfile -Destination $wintemp Add-WindowsPackage -Online -PackagePath $wintemp\$lpfile $runonce | Out-File -FilePath C:\Windows\Temp\SetupLang.ps1 -Encoding ascii Set-ItemProperty -Path $RunOncePath -Name "SetupLang" -Value "powershell.exe -ExecutionPolicy RemoteSigned -file C:\Windows\Temp\SetupLang.ps1" Set-ItemProperty -Path $AutoLogonPath -Name "AutoAdminLogon" -Value "1" Set-ItemProperty -Path $AutoLogonPath -Name "DefaultUserName" -Value $AdminUser Set-ItemProperty -Path $AutoLogonPath -Name "DefaultPassword" -Value $AdminPassword restart-computer -Force
以前の投稿とほとんど同じなのですが、タイムゾーンと OS の選択 (Windows Server 2012 / R2 / Windows 8.1) 管理者ユーザーの情報が引数として設定できるようにしています。
カスタムスクリプトでは実行時の引数を指定できるので、ここで OS のバージョンと管理者ユーザー/パスワードを指定します。
カスタムスクリプトに上記の PowerShell を記述した PS1 ファイルを指定して、引数には
-OS WindowsServer2012R2 -AdminUser <管理者ユーザー> -AdminPassword <左記ユーザーのパスワード>
というような引数を設定し、ギャラリーからイメージを作成して、展開終了後に30分程度待つと日本語 UI がインストールされた状態で再起動されます。
実行するスクリプトの取得をストレージ / ソース管理 / 構成管理の仕組みを組み合わせて使って実行できるようにするといろいろと面白そうですね。
# この辺はまだまだ勉強が必要なので全然試せていないですが…。