Windows のシステム設定を自動化するための覚え書き
仮想マシンだったり、新しく移行した PC だったり、と Windows セットアップ後の各種システム設定を自動化したい。いちいち手で設定するのはだるい。なんとかできないかと思って調べたことと、現時点での結論。
背景
- コントロールパネル等を手打ちで反映するのがだるすぎる
- スクリプト一発で反映できたら理想だよね
結論
- コマンドで制御できるもの → コマンドの使い方を覚えれば自動化できると思う
- コマンドで制御できないもの → レジストリを直にいじればよいが、どの設定がレジストリのどこに保存されてるか調べないといけないし、レジストリいじっただけでは設定反映されないので微妙
コマンドで制御できないもの
レジストリ に保存されていて、かつ コマンドによる保存をサポートしていない 設定全般。
現時点での結論
- 保存場所(キーとエントリ)はググれば見つかる
- レジストリ操作は
reg
コマンド、あるいは PowerShell のSet-ItemProperty
- 問題
- レジストリいじっただけでは システムに反映されない
反映されない、とは?
たとえば下記フォルダオプションのレジストリにて HideFileExt を 0 から 1(隠しファイルを表示→非表示)に変えたとする。エクスプローラー上ですぐさま反映されるかというと、No である。
反映は エクスプローラー自身が(当該レジストリを)再読込しない限り 行われない。フォルダオプションの画面(コントロールパネル)で OK ボタンを押した時に反映されるのは、エクスプローラーがそういう作りになっているから。
反映させるにはどうしたらいい?
再読込させればいい。
ただし対象アプリ(たいていはエクスプローラー)が再読込のインタフェースを公開していなければ不可能である。せいぜい プロセスをまるごと殺して、また再起動する ことで無理矢理一から読み込ませる程度か。
restart_exlorer.bat
@echo off taskkill /f /IM explorer.exe start "" explorer.exe
ただしこの強引再起動だと「一部のトレイアイコンが表示されなくなる」といった問題が生じる。また、「画面」と「フォルダを開いてるアプリ」全部に再読込処理が走るため重たい。
(参考) レジストリの保存場所の調べ方
たとえばシステムのプロパティ > 詳細設定タブ > パフォーマンスオプション の「パフォーマンスを優先する」のレジストリ保存場所を調べたい場合。
- 1 日本語で「パフォーマンスを優先する レジストリ」などで検索する
- 2 見つからない場合、英語で検索する
- 2-1 英語名を調べる
- パフォーマンスオプション → performance option、これで英語版 Google で画像検索
- 「Adjust for best performance」だとわかる
- 2-2 「adjust for best performance registry」で検索
- How could I disable windows effects through batch - Stack Overflow が見つかった
- 2-1 英語名を調べる
結論: VisualFXSetting=2 が「パフォーマンスを優先する」の意。
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects] "VisualFXSetting"=dword:00000002
(参考) フォルダオプション
「隠しファイルを表示」「拡張子を表示」「保護されたファイルを表示」の保存場所。
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "Hidden"=dword:00000001 "HideFileExt"=dword:00000000 "ShowSuperHidden"=dword:00000001
参考: registry - Configure Windows Explorer Folder Options through Powershell - Stack Overflow
コマンドで制御できるもの
レジストリ
reg コマンド。
- reg add/delete/copy で直接操作
- reg save/load/restore で hiv ファイルベースの import/export
- reg import/export で reg ファイルベースの import/export
ちなみに hiv と reg の比較は以下。
- hiv はバイナリファイルだが ACL(権限設定) なども含めて保存する
- reg はテキストファイル
参考: windows - Difference between "reg save" and "reg export"? - Super User
サービス
sc コマンド。
タスクスケジューラ
schtasks コマンド。
環境変数
ローカルなら set
、グローバルなら setx
で変更可。
ネットワーク(アダプタ)設定
netsh
コマンド。
ファイル操作
mkdir
フォルダ新規rmdir
フォルダ削除del
ファイル削除move
ファイル移動ren
ファイルリネーム
おわりに
本気で自動化するとしたら、
- sc, netsh など各種コマンドの使い方を覚える
- 各種コマンドを使って(自分好みの)設定を行うスクリを書く
- どのシステム設定がレジストリのどこに保存されてるか洗い出す
- レジストリを(自分好みの設定に)いじるスクリを書く
- エクスプローラーを再起動するスクリを書く
- 必須ではない
- 最悪 Windows を再起動すれば反映されるし
これら全部をやらないといけない。気が遠くなるような作業だ。