目次

本エントリの概要
- WindowsPEで無線LANアダプタのMACアドレスを取得したいと思い、先人の記事を参考にWindowsREをベースにWindowsPEを作成した記録(ちらしのうら)です。
- この記事の対象は主に「WindowsPEを自分で作れる人」です。
前提
- 作成環境 : Windows11 24H2
背景
- WindowsPEでWindowsイメージのリカバリーなどをしているのですが、「リカバリー時にシリアル番号とMACアドレスを取得したい」という要求が発生しました。
- WindowsPEではドライバを入れても無線LANサービスが稼働せず、無線LANアダプタの情報を取得することができないと判明します。
- 先人が全く同じ内容で簡単な記録を残してくれていましたのでそれを参考に作ってみました。
用意するもの
- Windows ADK + WindowsPE作成環境
- Windows ADK のダウンロードとインストール | Microsoft Learn
- Windows ADK
- Windows ADK用の Windows PE アドオン
- インストール方法は省略します。(検索すればすぐに見つかると思います)
- Windows ADK のダウンロードとインストール | Microsoft Learn
- Windows11インストーラー
- 今回はMicrosoftのサイトからインストーラーのisoファイルをダウンロードしました。
- Windows 11 のダウンロード
- ネットワークデバイスのドライバ
- 対象デバイスのドライバをメーカーサイトなどからダウンロードし解凍しておきます。
- 主に**.infファイルがインストールに必要になります。
- startnet.cmd
- WindowsPE起動時のコマンドを変更したい場合は書き換えたものを用意して作業フォルダに置いておきます。
手順
1. WindowsREのwimの取り出し
- Windows11のインストーラーisoを右クリックからマウントします。→ A
- マウントしたAの
\sources\install.wimを作業フォルダにコピーします。 - install.wimをdismでマウントします。→ B
- マウントしたBの
\Windows\System32\Recovery\Winre.wimを作業フォルダにコピーします。 - Bを
/discardオプションでアンマウントします。 - Aを右クリック「取り出し」でアンマウントします。
コマンド例(3~5)
MD C:\work\winre dism /Mount-Image /ImageFile:"C:\work\resource\install.wim" /index:1 /MountDir:"C:\work\winre" copy C:\work\winre\Windows\System32\Recovery\Winre.wim C:\work\resource\ dism /Unmount-Image /mountdir:"C:\work\winre" /discard
2. WindowsREをベースにWindowsPEを作る
copypeコマンドでベースを作ります。- Winre.wimをboot.wimの名前で上書きします。
- boot.wimをマウントします。
- WindowsPEで必要なパッケージ群を追加します。
- ロケールやタイムゾーンを設定します。
- デバイスドライバを追加します。
- ドライバの上位階層を指定して
/recurseオプションをつければ自動的に探してくれます。
- ドライバの上位階層を指定して
- wlanサービスに必要なファイルを追加します。
- 以下2つのファイルをマウント先の同じディレクトリにコピーします。
C:\Windows\System32\dmcmnutils.dllC:\Windows\System32\mdmregistration.dll
- 以下2つのファイルをマウント先の同じディレクトリにコピーします。
\Windows\system32\winpeshl.iniをリネームします。- (必要なら)startnet.cmdをカスタムしたものに置き換えます。
/commitオプションでアンマウントします。
コマンド例
SET SOURCE_DIR=C:\work\resource SET WS_DIR=C:\work\WinPE_amd64 SET PACK_DIR=C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs CD /D C:\work copype amd64 %WS_DIR% rem boot.wimをWindowsREのイメージに置き換える ren %WS_DIR%\media\sources\boot.wim boot.wim.default copy %SOURCE_DIR%\windows\Winre.wim %WS_DIR%\media\sources\boot.wim rem マウントする dism /Mount-Image /ImageFile:"%WS_DIR%\media\sources\boot.wim" /index:1 /MountDir:"%WS_DIR%\mount" dism /Get-Packages /Image:"%WS_DIR%\mount" rem ここからパッケージ追加 rem ネットワーク WinPE-Dot3Svc dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-Dot3Svc.cab" rem WMI WinPE-WMI: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-WMI.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-WMI_ja-jp.cab" rem Microsoft .NET WinPE-NetFX: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-NetFx.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-NetFx_ja-jp.cab" rem スクリプト WinPE-Scripting: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-Scripting.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-Scripting_ja-jp.cab" rem PowerShell WinPE-PowerShell: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-PowerShell.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-PowerShell_ja-jp.cab" rem PowerShell DISMコマンド WinPE-DismCmdlets: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-DismCmdlets.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-DismCmdlets_ja-jp.cab" rem PowerShell SecureBoot WinPE-SecureBootCmdlets: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-SecureBootCmdlets.cab" rem SecureStartup WinPE-SecureStartup: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-SecureStartup.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-SecureStartup_ja-jp.cab" rem HTA WinPE-HTA: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-HTA.cab" dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\WinPE-HTA_ja-jp.cab" rem 日本語言語パック: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\ja-jp\lp.cab" rem 日本語フォントパッケージ: dism /Add-Package /Image:"%WS_DIR%\mount" /PackagePath:"%PACK_DIR%\WinPE-FontSupport-JA-JP.cab" rem ロケールを日本語に設定 rem 入力ロケールを日本語に設定 rem キーボードを日本語に設定 rem タイムゾーンを日本標準時に設定 dism /image:"%WS_DIR%\mount" /Set-AllIntl:ja-jp dism /image:"%WS_DIR%\mount" /Set-InputLocale:0411:00000411 dism /image:"%WS_DIR%\mount" /Set-LayeredDriver:6 dism /image:"%WS_DIR%\mount" /Set-TimeZone:"Tokyo Standard Time" rem ドライバインストール dism /Add-Driver /Image:"%WS_DIR%\mount" /Driver:%SOURCE_DIR%\drivers /Recurse rem wlanサービスに必要なファイルを追加する copy /Y C:\Windows\System32\dmcmnutils.dll %WS_DIR%\mount\Windows\system32\ copy /Y C:\Windows\System32\mdmregistration.dll %WS_DIR%\mount\Windows\system32\ rem winpeshl.iniをリネーム ren %WS_DIR%\mount\Windows\system32\winpeshl.ini winpeshl.ini.default rem 初期化コマンドに差し替える copy /Y %SOURCE_DIR%\startnet.cmd %WS_DIR%\mount\Windows\system32\ rem コミットしてディスクイメージをアンマウント dism /Unmount-Image /mountdir:"%WS_DIR%\mount" /commit
これで作ったイメージでWindowsPEとして起動すれば無線LANアダプタのデバイス情報も取得できるようになります。
3. 製造番号と無線LANアダプタの情報取得方法
PowerShellで取り出すコマンドサンプルです。
# Get CurrentTime $today = (get-date) $current = $today.toString() # Get SerialNumber $serial_lines = (wmic bios get serialnumber) # タイトル行と空行を省き、トリムする $serial_number = ($sn | Where-Object{$_ -ne "" -and $_ -notmatch "SerialNumber"}).trim() # Get MACAddress # 「Microsoft」で始まる名前は仮想アダプタなので省く $netadapters = (Get-CimInstance -class Win32_NetworkAdapterConfiguration | Where-Object{$_.Description -notmatch "Microsoft.*"} | Select-Object Description,MACAddress) # Output $info = "CurrentTime : " + $current + "`r`n" + "SerialNumber : " + $serial_number + "`r`n" + "MACAddress1 : " + $netadapters[0].MACAddress + " (" + $netadapters[0].Description + ")`r`n" + "MACAddress2 : " + $netadapters[1].MACAddress + " (" + $netadapters[1].Description + ")" $info
ポイント
- 無駄な操作もあるかもしれません。
- 参考にした記事ではstartnet.cmdに「net start wlansvc」を追記するよう書かれていましたが、その通りにして起動すると「すでに開始済」とのメッセージが出ました。バージョンによって異なるのかもしれません。