Windows10 Feature UpdateのISOファイルを使ったサイレントインストール
すでにWindows11がでており、今更だがWindows10のFUをサイレントインストールする方法をまとめてみる。
手順
- Windows10のISOファイルのダウンロード
- ISOファイルの配布
- サイレントインストール
Windows10のISOファイルのダウンロード
最新のISOイメージはここからダウンロード
↑からは最新エディション(Windows 10 November 2021 Update)しかダウンロードできないため、公開が終了した過去バージョンをダウンロードするには「Rufus」を使用する。
ISOファイルの配布
「Rufus」を使用してUSBメモリやDVDでインストールメディアを作成してやる方法はこちら
今回は、インストールメディアを作成せずにISOファイルをファイルサーバやUSBメモリを使って、対象のクライアントPCに配布する。
サイレントインストール
powershellでクライアントPCに配布されたISOファイルをマウントし、サイレントインストールを実行する。
#ISOファイルのパスを指定
$FilePath = "C:\XXXX\Win10_XXXX_Japanese_x64.iso"
# ディスクイメージをマウント
Mount-Diskimage -ImagePath $FilePath
# マウントしたドライブのドライブレターを取得
$DLetter = (Get-DiskImage $FilePath | Get-Volume).DriveLetter
# 実行するパスの設定
$executePath = $DLetter + ":\setup.exe"
# コマンドラインオプションを指定して実行
start-process $executePath "/Auto Upgrade /Quiet"
# 再起動もしない場合
# start-process $executePath "/Auto Upgrade /Quiet /NoReboot"
コマンドラインオプションの説明
/Auto Upgrade
アプリとデータを保存 Windows のアップグレードを実行します。 アップグレードインストールオプションが使用できない場合、またはユーザーがアプリの互換性の問題を解決する必要がある場合、Windows セットアップは警告なしで終了し、終了コードをログに記録します。
インストール処理は自動で進むが「Windows をインストールしています」が表示されるので、進行状況を確認できる。
/Quiet
ロールバックユーザーエクスペリエンスを含む Windows セットアップのユーザーエクスペリエンスが抑制されます。
バックグランドで処理が進むが、進行状況が分からない。
「ModernSetupHostプロセス」が動いているうちはインストール処理が続いているっぽい。
/NoRebootを指定しないと自動で再起動まで実行されるので、ユーザが作業中だと強制再起動されてしまうので注意。
/NoReboot
Windows セットアップの下位レベルのフェーズが完了した後にコンピューターを再起動しないように Windows セットアップに指示します。
インストール処理の終了後、自動で再起動されないので、手動で再起動後Updateウィザードが実行され、インストールが完了する。
詳細はこちら
上記のpowershellスクリプトを作成したら、以下のようなpowershellを実行するbatファイルを作成し、管理者で実行
powershell -ExecutionPolicy unrestricted "C:¥xxxxx¥win10_FU_setup.ps1"
追記
検証を進めたところ、古い端末(1709とか1803とか)でpowershellでかつ[/Quiet]オプションをつけて実行するとプロセス[Modern Setup Host]は実行されるのに一向に終わらないという事象を確認。
(最初はCPUやらメモリやらディスクの使用率がそこそこあるのにしばらくすると全然動いてない感じになり、一晩放置しても進展なかったことあり。)
なので、cmdでもできるようにbatファイル版も作成してみた。
@echo off
rem ISOファイルをマウント
explorer "C:\XXXX\Win10_XXXX_Japanese_x64.iso"
timeout 3
rem あらかじめマウント後のボリューム名を確認して、指定する
set VolumeName="CCCOMA_X64FRE_JA-JP_DV9"
rem ボリューム名が一致するボリュームラベルを取得
for /f "tokens=1,2" %%a in ('wmic path win32_LogicalDisk get caption^, VolumeName') do (
if "%%b"==%VolumeName% set Lavel=%%a
)
@echo on
rem コマンドラインオプションを指定して実行
%Lavel%\setup.exe /Auto Upgrade /Quiet
こっちだと上手くできるようになったことを確認。
これでもプロセスが進まないようであれば、[/Quiet]オプションを外してやると概ね大丈夫そう。
[/Quiet]オプションをつけていて、プロセスが実行されているか不安な場合は、タスクマネージャで[Modern Setup Host]が動いているか確認してみる。
※参考
イメージのアンマウント方法
# イメージをアンマウント
Dismount-DiskImage -ImagePath C:\XXXX\hoge.iso
Discussion