かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.39 VMゲストの初期設定に役立つスクリプト|ラボ環境 in オンプレを作る(7)

 

 

vol.39 VMゲストの初期設定に役立つスクリプト|ラボ環境 in オンプレを作る(7)

2024年09月02日配信
2024年09月06日更新
執筆者:山内 和朗

 前回(vol.38)は、Hyper-V VMを作成および管理するHyper-Vホスト側で利用するPowerShellスクリプトを紹介しました。今回はWindowsゲストを実行するHyper-V VM側に事前にコピーしておいているバッチおよびスクリプトを紹介します。主な目的は、ゲストOSの初期設定の簡素化です。

 

VMテンプレートに組み込んだバッチとスクリプト

 

 WindowsのVMテンプレートには、「C:¥vmtools」フォルダーにこれまで作成したスクリプトやバッチ、無人応答ファイル(unattend.xml)のテンプレートをあらかじめコピーしておいています。それらはVMの展開後に、必要に応じて、手動で実行することを想定して配置したものです。その中の「run1st.cmd」を紹介します。このバッチを管理者として実行することで、y/n形式で答えていくことで設定を簡素化します(画面1)。

 

画面1
画面1 VMの展開後に「run1st.cmd」を管理者として実行し、検証、テスト環境でよくする設定を自動化する

 

[run1st.cmd](ANSIエンコードで保存すること)

@echo off
choice /C YN /m "エクスプローラーでファイルの拡張子を表示しますか?"
if %errorlevel% == 1 (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f
) else (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 1 /f
)

choice /C YN /m "エクスプローラーで隠しファイルを表示しますか?"
if %errorlevel% == 1 (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 1 /f
) else (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 2 /f
)

choice /C YN /m "エクスプローラーでOSで保護されたファイルを表示しますか?"
if %errorlevel% == 1 (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowSuperHidden /t REG_DWORD /d 1 /f
) else (
  REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowSuperHidden /t REG_DWORD /d 0 /f
)

choice /C YN /m "Windowsファイアウォールを無効にしますか?"
if %errorlevel% == 1 (
  netsh advfirewall set allprofiles state off
) else (
  netsh advfirewall set allprofiles state on
)

choice /C YN /m "PowerShellの実行ポリシーをRemoteSignedに変更しますか?"
if %errorlevel% == 1 (
  powershell.exe -Command "& {Set-ExecutionPolicy RemoteSigned; Get-ExecutionPolicy}"
)

choice /C YN /m "Administratorのパスワードを無期限にしますか?"
if %errorlevel% == 1 (
  WMIC USERACCOUNT WHERE Name="Administrator" SET PasswordExpires=False
)

choice /C YN /m "コンピューター名(%computername%)を変更しますか?"
if %errorlevel% == 1 (
  set /p newname=新しいコンピューター名を入力してください:
)
if %errorlevel% == 0 (
  wmic computersystem where name="%computername%" call rename name="%newname%"
)

choice /C YN /m "今すぐWindows Updateを実行しますか?"
if %errorlevel% == 1 (
  if exist "c:\vmtools\WUA_SearchDownloadInstall.vbs" (
    cscript c:\vmtools\WUA_SearchDownloadInstall.vbs /Automate
  ) else (
    echo WUA_SearchDownloadInstall.vbsが見つかりません。
  )
)

choice /C YN /m "Windowsを再起動しますか?"
if %errorlevel% == 1 (
  echo 再起動を開始します。
  pause
  shutdown /r /t 0
)

※注意: このバッチスクリプト内で使用している「WMIC」コマンドは既に非推奨となっており、Windows 11バージョン22H2はオンデマンド機能(既定で有効)になりました。Windows 11およびWindows Serverの次のリリースでは、オンデマンド機能は既定で無効になり、さらに詳細のリリースではWMICの機能はWindowsから削除される予定です。
WMI command line (WMIC) utility deprecation: Next steps(Windows IT Pro Blog)

 

run1st.cmdの説明

 

 「run1st.cmd」では、エクスプローラーの表示設定の変更、セキュリティが強化されたWindowsファイアウォールの無効化/有効化、PowerShell実行ポリシーの変更、Administratorのパスワードを無期限に設定、コンピューター名の変更、およびWindows Updateの即時実行をバッチ化しており、y/nで答えていくことで必要な設定を行います。エクスプローラーの表示設定の変更、Windowsファイアウォールの無効化/有効化については、2回目以降の実行でnで答えた場合に既定に戻すこともできます(それ以外は一方向です)。

 エクスプローラーの表示設定は、表示オプションの変更時(拡張子の表示/非表示、隠しファイルの表示/非表示、OSファイルの表示/非表示)のアクティビティをWindows SysinternalsのProcess Monitor(procmon)でキャプチャし、レジストリの変更場所を調べたものをREGコマンドで表現しました(画面2、画面3)。Procmonについては「ITニュース. Sysinternals更新情報: Process Monitor v4.0(さらにv4.01)」の記事をご覧ください。なお、これらの設定の変更は、Windowsの再起動後に有効になります。

画面2
画面2 エクスプローラーの表示オプションの変更操作時のアクティビティを、Procmonでキャプチャ

 

画面3
画面3 エクスプローラーのプロセスによるレジストリ値の設定(RegSetValue操作)から、表示オプションの保存先を見つける

 Windowsファイアウォールの設定は、コマンドプロンプトで以下のコマンドラインを実行することで、即時にオフ/オンすることができます。

 

C:¥> netsh advfirewall set allprofiles state offまたはon

 

 PowerShellの実行ポリシーは、PowerShellスクリプトの実行の可否を制御します。以下のコマンドラインでRemoteSignedに設定することで、ローカルスクリプトの実行が許可されます。インターネットからダウンロードされたスクリプトについては、デジタル署名が必要です。この設定はWindows Serverの既定の実行ポリシーです。Windowsクライアントの既定はRestricted(スクリプトの実行は不可)です。

 

PS C:¥> Set-ExecutionPolicy RemoteSigned

 

 Administratorのパスワードの期限については、評価、テスト環境を想定したものです。WindowsクライアントではAdministratorアカウントは既定で無効なので、特に設定変更は不要です。Windows Serverについては、パスワードを無期限にしておくことが多いと思います。そのためにこの設定を用意しました。

 VMテンプレートから展開したVMのコンピューター名は、ランダムに設定されます。WMICコマンドを次のように実行すると、コンピューター名を変更することができます。

 

C:¥> wmic computersystem where name="%computername%" call rename name=<新しいコンピューター名>"

 

 Windows Updateについては、「メモ. Windows Update補完計画、フェーズ2」でも紹介した、Microsoft提供のサンプルスクリプトをそのままコピーしたものを使用しています。

Windows UpdateエージェントAPIの使用|更新プログラムを検索、ダウンロード、インストールする(Microsoft Learn)

blog_subscribe

blog_comment

最新記事