Windowsの新規ユーザーの設定をあらかじめ変更しておく方法
はじめに
こんにちは。SHIFTのインフラサービスグループの水谷です。
今回はWindowsのレジストリと、OS設定の自動化にまつわる話を書いてみたいと思います。
ご存じのようにWindowsの各種設定は、Linux系OSが(設定ファイル、あるいはconfファイルと呼ばれる)テキストファイルに記述するのとは異なり、レジストリに登録するのがほとんどです。hostsファイルなど、一部例外がありますが、ほとんどのOSの設定やユーザー情報、アプリケーションの設定までがレジストリで管理されていまね。
トップレベルキーとハイブ
一見1つの「レジストリ」というものが、すべての設定情報を管理しているように見えますが、実際にはいくつかのトップレベルキーがあり、それらの下で分割管理されています。
下のスクリーンショットのように、HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、そしてHKEY_CURRENT_CONFIGの5つのトップレベルキーが存在しますね。これら以外にもレジストリエディターからは見えないキーもあったりするのですが、ここでは省略することにします。
このトップレベルキーとは別に「ハイブ」という概念があります。
ハイブの定義は「レジストリ内のキー、サブキー、および値の論理グループ」となるのですが、かみ砕いて書くと、「レジストリファイルに紐づく特定のキーの下に読み込まれたレジストリの一部」ということになるでしょうか。
例えば、HKEY_LOCAL_MACHINEの下にあるHKEY_LOCAL_MACHINE\Softwareおよびそれ以下のレジストリは、%SystemRoot%\System32\Config\SOFTWAREというファイルが対応しています。つまり、HKEY_LOCAL_MACHINE\Software以下を変更すると、それに対応する%SystemRoot%\System32\Config\SOFTWAREが書き換わります。
また、同様にHKEY_CURRENT_USERは%USERPROFILE%NTUSER.DATというファイルが対応しています。
これらのハイブはWindowsが起動したタイミング、あるいはモノによってはユーザーがログインした際に自動的にロードされるようになっているため、ユーザーが意識することはありません。
新規ユーザーのハイブ
さてここからが本題です。
現在存在しているユーザーにとってのHKEY_CURRENT_USERは、先ほども書いたように%USERPROFILE%NTUSER.DATが対応しています。では、このレジストリハイブは、いつどのように作られたのでしょうか?
なぜそのことを気にしているか、というと、これから作成されるであろうユーザーの設定をあらかじめ決めておきたいことがよくあるからです。
例えば、OSの表示言語を日本語にしたい、あるいはDefenderを止めておきたい、などたくさんあると思います。しかし、まだ存在しないユーザーのレジストリを変更することは(ハイブのファイルが作成されていないため)できません。かと言って、ユーザーを作成した後に手動で変更するのは手間がかかります。できることなら、新規ユーザーの設定をあらかじめ指定しておきたいよね、という話になるのです。
で、Windowsの動作を調べてみると、新規ユーザーが作成されると、そのユーザーのユーザーディレクトリ(C:\Users<新規ユーザーのユーザー名>)にC:\Users\Default\NTUSER.DATがコピーされることがわかります。そして、(ファイル名からお察しの通り)これがその新規ユーザーのHKEY_CURRENT_USERになるわけです。
となれば、そうです。このC:\Users\Default\NTUSER.DATを書き換えれば、新規ユーザーのデフォルト設定を変えることができる、ということになります。
ハイブのロードとアンロード
Windowsにはハイブに対応するファイルを手動でレジストリ内にロードする方法が用意されています。コマンドラインでの操作となりますが、reg.exeをloadオプションで実行することがこれで実現できます。
例えば、C:\Users\Default\NTUSER.DATをHKEY_USERS\DefaultUserにロードしたい場合は、以下のように実行します。
reg load HKEY_USERS\DefaultUser C:\Users\Default\NTUSER.DAT
意外と簡単ですね。ただし、このコマンドの実行には管理者権限が必要である点にはご注意ください。
また、ロードしたレジストリハイブをアンロードするには、以下のようにします。
reg unload HKEY_USERS\DefaultUser
新規ユーザーの設定変更例
では、1つ例を見てみましょう。
Windowsデスクトップの壁紙に関する設定は、ユーザー毎に変更できるものなので、HKEY_CURRENT_USERに書き込まれている情報の1つです。
具体的には、HKEY_CURRENT_USER\Control Panel\DesktopのレジストリキーのWallPaperに画像ファイルのパスが書かれていますので、これを変更すれば壁紙が変わります(書き換えたらすぐ変わるわけではありませんが)。
では、デフォルトユーザーのハイブをロードしてみます。
reg load HKEY_USERS\DefaultUser C:\Users\Default\NTUSER.DAT
すると、このようにHKEY_USERSの下にDefaultUserというキーが現れ、デフォルトの個人設定にアクセスできます。
この下にあるControl Panel→Desktopの「WallPaper」を書き換えれば、デフォルトユーザーの設定が変わり、今後作成されるユーザーのデフォルト設定に反映されます。
Ansibleでやってみる
Ansibleでストレートに実装してみると、以下のようになりますね。
- name: Load hive
ansible.windows.win_shell:
reg load HKU\DefaultUser C:\Users\Default\NTUSER.DAT
- name: Update registry
ansible.windows.win_regedit:
path: HKU:\DefaultUser\Control Panel\Desktop
name: WallPaper
data: C:\mywallpaper.jpeg
type: string
- name: Unload hive
ansible.windows.win_shell:
reg unload HKU\DefaultUser
ansible.windows.win_shellモジュールでreg.exeを実行してハイブをロードし、レジストリを変更して、ハイブをアンロードする。とても分かりやすいものかと思います。
もちろんこれで問題ないのですが、実はansible.windows.win_regeditモジュールにはハイブをロードする機能があります。Ansibleのドキュメントサイト(https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_regedit_module.html )を見ると、hiveパラメーターにロードしたいレジストリハイブを指定すると、そのハイブをHKLM:\ANSIBLEにロードしてくれるようです。
これを使えば、以下の1タスクで新規ユーザーのデフォルト設定が変更できることになります。
- name: Update registry
ansible.windows.win_regedit:
path: HKLM:\Ansible\Control Panel\Desktop
name: WallPaper
data: C:\mywallpaper.jpeg
type: string
hive: C:\Users\Default\NTUSER.DAT
この機能とても便利ですね。私はずっとこれを知らずに先に書いたようなreg.exeを実行するタスクを書いて実装をしていました。。。
いずれにせよ、変更したい設定のレジストリ項目さえわかれば、Ansibleで新規ユーザーの設定を簡単に変更できますね。
まとめ
レジストリハイブは reg.exe load コマンドでレジストリの任意の場所にマウントできる。
C:\Users\Default\NTUSER.DAT をロードして書き換えれば新規ユーザーの初期設定を変えられる。
Ansibleのwin_regeditモジュールにはハイブをロードした上で変更を行う機能があってとても便利!
自動化、効率化の参考になれば幸いです。
IaC支援サービスのご紹介
SHIFTではTerraformやCDKを使ったクラウドインフラ構築の自動化や、Ansibleを使ったサーバOSの設定自動化や構成管理のご支援も行っております。ご依頼・ご相談は下記リンクからお願いします。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
PHOTO:UnsplashのErik Eastman