以下の内容はhttps://dupont.hatenablog.jp/entry/2025/02/23/221231より取得しました。


WindowsREをベースにしたWindowsPEで無線LANアダプタのMACアドレス情報を取得する


目次


本エントリの概要

  • WindowsPEで無線LANアダプタのMACアドレスを取得したいと思い、先人の記事を参考にWindowsREをベースにWindowsPEを作成した記録(ちらしのうら)です。
  • この記事の対象は主に「WindowsPEを自分で作れる人」です。

前提

  • 作成環境 : Windows11 24H2

背景

  • WindowsPEでWindowsイメージのリカバリーなどをしているのですが、「リカバリー時にシリアル番号とMACアドレスを取得したい」という要求が発生しました。
  • WindowsPEではドライバを入れても無線LANサービスが稼働せず、無線LANアダプタの情報を取得することができないと判明します。
  • 先人が全く同じ内容で簡単な記録を残してくれていましたのでそれを参考に作ってみました。

用意するもの

  • Windows ADK + WindowsPE作成環境
  • Windows11インストーラー
  • ネットワークデバイスのドライバ
    • 対象デバイスのドライバをメーカーサイトなどからダウンロードし解凍しておきます。
    • 主に**.infファイルがインストールに必要になります。
  • startnet.cmd
    • WindowsPE起動時のコマンドを変更したい場合は書き換えたものを用意して作業フォルダに置いておきます。

手順

1. WindowsREのwimの取り出し

  1. Windows11のインストーラーisoを右クリックからマウントします。→ A
  2. マウントしたAの\sources\install.wimを作業フォルダにコピーします。
  3. install.wimをdismでマウントします。→ B
  4. マウントしたBの\Windows\System32\Recovery\Winre.wimを作業フォルダにコピーします。
  5. Bを/discardオプションでアンマウントします。
  6. 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を作る

  1. copypeコマンドでベースを作ります。
  2. Winre.wimをboot.wimの名前で上書きします。
  3. boot.wimをマウントします。
  4. WindowsPEで必要なパッケージ群を追加します。
  5. ロケールやタイムゾーンを設定します。
  6. デバイスドライバを追加します。
    • ドライバの上位階層を指定して/recurseオプションをつければ自動的に探してくれます。
  7. wlanサービスに必要なファイルを追加します。
    • 以下2つのファイルをマウント先の同じディレクトリにコピーします。
      • C:\Windows\System32\dmcmnutils.dll
      • C:\Windows\System32\mdmregistration.dll
  8. \Windows\system32\winpeshl.iniをリネームします。
  9. (必要なら)startnet.cmdをカスタムしたものに置き換えます。
  10. /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」を追記するよう書かれていましたが、その通りにして起動すると「すでに開始済」とのメッセージが出ました。バージョンによって異なるのかもしれません。



以上の内容はhttps://dupont.hatenablog.jp/entry/2025/02/23/221231より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14