・Windowsのセットアップを自動化する

おつかれさまです。長崎のあいつです。

皆様も、週末になるとハードオフに行ってジャンクPCを拾ってきては修理し、使いもしないのにセットアップと環境構築の苦行に勤しんでいるかと思い……拾ってこない?セットアップもしない?そうですか。そうでしたか。この話は終わりだ!解散だ、散れ!散れ!!!!!

  

気を取り直して。

テストや検証、再構築やご奉仕メンテナンスなどでWindowsを新規セットアップ→環境構築することが多いので、ある程度までの環境構築を自動化しています。何かの役に立つ人もいるかもしれないので、備忘録を兼ねてバッチファイルなどを公開します。

【追記】

「何でもいいからさっさと試したい!!!という人は、セットアップ用USBメモリを作って(Windows10 / Windows11)、ここからファイルをダウンロードしてUSBメモリに展開してください。

Windowsユーザー : kohaku
Windowsパスワード : san
表示名・使用者 : 琥珀

以上の設定で自動セットアップがお試しいただけます。壁紙つき。

★必要なもの

1.Windows10 or Windows11のセットアップ用USBメモリ
・MicrosoftからUSBメモリ作成ツールを落とし、事前準備しておいてください。(Windows10 / Windows11)

2.そこそこ速いネットワーク環境
必須となります。オフラインでは環境構築できません。

3.wingetでインストールできないアプリの実行ファイル
・秀丸やEXPLZHなど。詳細は後述します。

★USBメモリの準備

作成したセットアップ用USBメモリに、下記のファイル/フォルダを追加で作成します。

root
AutoUnattend.xml ←ファイルを新規作成
┗\sources
 ┗\$OEM$ ←フォルダ新規作成
  ┗\$1 ←フォルダ新規作成
   ┗\SETUP ←フォルダ新規作成
     ┣setup.bat ←ファイルを新規作成
     ┗\resource ←フォルダ新規作成

★新規作成するファイル(2ファイル)

①AutoUnattend.xml (USBメモリのルート\AutoUnattend.xml)

Windowsセットアップの初期部分を制御するファイルです。設定を煮詰めればディスクのフォーマットなども含めた完全自動化ができるのですが、汎用性を考え今回は下記の制御に留めています。

・Windows11非対応PCにも11を導入できるようにレジストリ変更

・「インストールする言語」のスキップ
・「時刻と通貨の形式」のスキップ
・「キーボードまたは入力形式」のスキップ
・「キーボードの種類」のスキップ
・「今すぐインストール」のスキップ
・「プロダクトキーの入力」のスキップ
×「導入するOSのエディション」 *
・「ライセンス条項」のスキップ
・「インストールの種類」のスキップ
×「インストールするディスク」

・「お住まいの地域」のスキップ
・「キーボードレイアウト」のスキップ
・「2つ目のキーボードレイアウト」のスキップ
・「ネットワーク(WiFi)設定」のスキップ
・「設定する方法」のスキップ
・「ユーザーアカウント設定」のスキップ
・「閲覧データアクセス」のスキップ
・「デバイスのプライバシー」のスキップ
・「エクスペリエンスのカスタマイズ」のスキップ
・「コルタナ設定」のスキップ

*メーカー製PCなど、PC本体にWindows10/11のライセンスが埋め込まれている場合は自動判別

以上の処理を行います。具体的にはUSBメモリから起動して導入するOSのエディションを選び、インストールするディスクを選べば後はデスクトップ画面が表示されます。

下記の内容をコピペした後、必要項目を変更して保存してください。

*Windows標準のメモ帳で保存するときは、必ず文字コードをANSI(CP932≒Shift-JIS)で保存してください。UTF-8だと文字化けして正常に動きません。

★コード(正常に表示されない人はここから)

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="windowsPE">
        <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SetupUILanguage>
                <UILanguage>ja-JP</UILanguage>
            </SetupUILanguage>
            <InputLocale>0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}</InputLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <UILanguage>ja-JP</UILanguage>
            <UILanguageFallback>ja-JP</UILanguageFallback>
            <UserLocale>ja-JP</UserLocale>
        </component>
        <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <!-- セットアップ開始前に実行するコマンド。-->
            <RunSynchronous>
                <!-- Win11非対応環境向けのレジストリ 1/3 -->
                <RunSynchronousCommand wcm:action="add">
                    <Order>1</Order>
                    <Description>BypassTPMCheck</Description>
                    <Path>cmd /c reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1</Path>
                </RunSynchronousCommand>
                <!-- Win11非対応環境向けのレジストリ 2/3 -->
                <RunSynchronousCommand wcm:action="add">
                    <Order>2</Order>
                    <Description>BypassSecureBootCheck</Description>
                    <Path>cmd /c reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1</Path>
                </RunSynchronousCommand>
                <!-- Win11非対応環境向けのレジストリ 3/3 -->
                <RunSynchronousCommand wcm:action="add">
                    <Order>3</Order>
                    <Description>BypassRAMCheck</Description>
                    <Path>cmd /c reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1</Path>
                </RunSynchronousCommand>
            </RunSynchronous>
            <ImageInstall>
                <OSImage>
                    <InstallToAvailablePartition>false</InstallToAvailablePartition>
                    <WillShowUI>OnError</WillShowUI>
                    <InstallFrom>
                        <MetaData wcm:action="add">
                            <Key>/IMAGE/NAME</Key>
                            <Value></Value>
                        </MetaData>
                    </InstallFrom>
                </OSImage>
            </ImageInstall>
            <UserData>
                <ProductKey>
                    <Key></Key>
                    <WillShowUI>OnError</WillShowUI>
                </ProductKey>
                <AcceptEula>true</AcceptEula>
                <FullName>Windows User</FullName>
                <Organization>Windows Group</Organization>
            </UserData>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideWirelessSetupInOOBE>false</HideWirelessSetupInOOBE>
                <NetworkLocation>Home</NetworkLocation>
                <SkipUserOOBE>true</SkipUserOOBE>
                <SkipMachineOOBE>true</SkipMachineOOBE>
                <ProtectYourPC>1</ProtectYourPC>
            </OOBE>
            <!-- 作成するユーザーアカウント -->
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <!-- ★ ユーザーアカウント -->
                        <Name>**********</Name>
                        <Group>Administrators</Group>
                        <!-- ★ ユーザーアカウントの表示名 -->
                        <DisplayName>*****</DisplayName>
                        <Password>
                            <!-- ★ ユーザーのパスワード -->
                            <Value>**********</Value>
                            <PlainText>true</PlainText>
                        </Password>
                        <Description></Description>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <RegisteredOrganization></RegisteredOrganization>
            <!-- -★ Windowsの使用者名 -->
            <!-- とりあえずユーザーアカウントの表示名と合わせておけば無難 -->
            <RegisteredOwner>**********</RegisteredOwner>
            <!-- Windowsに自動ログオンする設定部分 後述のユーザーアカウントと合わせる-->
            <AutoLogon>
                <Enabled>true</Enabled>
                <!-- ★ 自動ログオンするユーザーアカウント -->
                <Username>**********</Username>
                <Password>
                    <!-- ★ 自動ログオンするユーザーのパスワード -->
                    <Value>**********</Value>
                    <PlainText>true</PlainText>
                </Password>                
            </AutoLogon>
            <DisableAutoDaylightTimeSet>true</DisableAutoDaylightTimeSet>
            <!-- 初回ログオン時に1度だけ実行するコマンド -->
            <FirstLogonCommands>
                <!-- 指定したユーザーのパスワード期限を無制限にする -->
                <SynchronousCommand wcm:action="add">
                    <Order>1</Order>
                    <RequiresUserInput>false</RequiresUserInput>
                    <!-- ★ 無期限にするユーザーを指定 -->
                    <!-- ユーザーアカウントと合わせておく -->
                    <CommandLine>cmd /C wmic useraccount where name="**********" set PasswordExpires=false</CommandLine>
                    <Description>Password Never Expires</Description>
                </SynchronousCommand>
                <!-- システム設定バッチを起動するようにレジストリを設定する -->
                <SynchronousCommand wcm:action="add">
                    <Order>2</Order>
                    <RequiresUserInput>false</RequiresUserInput>
                    <CommandLine>c:\SETUP\setup.bat</CommandLine>
                    <Description>1st Batch</Description>
                </SynchronousCommand>
            </FirstLogonCommands>
            <TimeZone>Tokyo Standard Time</TimeZone>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <JoinWorkgroup>Workgroup</JoinWorkgroup>
            </Identification>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>*</ComputerName>
        </component>
    </settings>
</unattend>

上記コードでハイライトされている場所を設定する必要があります。

<!-- ★ ユーザーアカウント -->
<Name>**********</Name>

「ユーザーアカウント」を入力してください。C:\Users\*****の部分になります。

例:<Name>kohaku</Name>

 <!-- ★ ユーザーアカウントの表示名 -->
<DisplayName>*****</DisplayName>

「Windowsで表示されるユーザー名」を入力してください。ログオン時や、ユーザーフォルダに表示されます。

例:<DisplayName>琥珀</DisplayName>

<!-- ★ ユーザーのパスワード -->
<Value>**********</Value>

「ユーザーアカウントのパスワード」を入力してください。

例:<Value>san</Value>

<!-- ★ Windowsの使用者名 -->
<!-- とりあえずユーザーアカウントの表示名と合わせておけば無難 -->
<RegisteredOwner>**********</RegisteredOwner>

「Windowsの使用者名」を入力してください。winverの画面などで表示されます。

例:<RegisteredOwner>琥珀</RegisteredOwner>

<!-- ★ 自動ログオンするユーザーアカウント -->
<Username>**********</Username>

Windowsに自動ログオンさせる「ユーザーアカウント」を入力してください。 *上の設定と合わせてください

例:<Username>kohaku</Username>

<!-- ★ 自動ログオンするユーザーのパスワード -->
<Value>**********</Value>

Windowsに自動ログオンさせる「ユーザーアカウントのパスワード」を入力してください。 *上の設定と合わせてください

例:<Value>san</Value>

<!-- ★ 無期限にするユーザーを指定 -->
<!-- ユーザーアカウントと合わせておく -->
<CommandLine>cmd /C wmic useraccount where name="**********" set PasswordExpires=false</CommandLine>

パスワードを無期限にする「ユーザーアカウント」を入力してください。 *上の設定と合わせてください

例:name=”kohaku”

設定は以上で完了です。

②setup.bat (USBメモリのルート\sources\$OEM$\$1\SETUP\setup.bat)

Windows起動後に実行されるバッチファイルです。Windowsの基本設定や、各種アプリのインストールを行います。このバッチを実行するにはネット接続が必須となります。

下記の内容をコピペした後、必要項目を変更して保存してください。

*Windows標準のメモ帳で保存するときは、必ず文字コードをANSI(CP932≒Shift-JIS)で保存してください。UTF-8だと文字化けして正常に動きません。

★コード(正常に表示されない人はここから)

@ECHO OFF
REM // ============================================================
REM // Windows10&11 環境構築バッチファイル 23式 (M model)
REM // build at 2023.02.16 + 2024.01.XX 

REM // ============================================================
REM // 実行権限を自動昇格させる
ECHO 【Stage 1/7】管理者権限に自動昇格させます
openfiles > nul
if errorlevel 1 (
    PowerShell.exe -Command Start-Process \"%~f0\" -Verb runas
    exit
)
ECHO;

CLS
REM // ============================================================
REM // WindowsUpdate
ECHO 【Stage 2/7】WindowsUpdateのチェックを行います *動いてない気もする
UsoClient startscan
UsoClient StartInstall
UsoClient ScanInstallWait

CLS
REM // ============================================================
REM // Windowsの初期設定
ECHO 【Stage 3/7】Windowsの初期設定を行います

REM // Windowsのコア部分
REM // UACをオフにする
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d "0" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d "0" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t REG_DWORD /d "0" /f
REM // 古いNASを考慮してSMB1.0を有効化
PowerShell Enable-WindowsOptionalFeature -FeatureName SMB1Protocol -Online -NoRestart

REM // タスクバー
REM // タスクバーを左揃えにする
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarAl" /t REG_DWORD /d "0" /f
REM // 検索を非表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d "0" /f
REM // タスクビューボタンを非表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d "0" /f
REM // ウィジェットボタンを非表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d "0" /f
REM // チャットを非表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn " /t REG_DWORD /d "0" /f
REM // 自動結合をオフ
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarGlomLevel" /t REG_DWORD /d "1" /f
REM // 自動結合をオフ
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarGlomLevel" /t REG_DWORD /d "1" /f
REM // アクションセンターのアプリのアイコンと新しい通知をオフ
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings" /v "NOC_GLOBAL_SETTING_GLEAM_ENABLED" /t REG_DWORD /d "0" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings" /v "NOC_GLOBAL_SETTING_BADGE_ENABLED" /t REG_DWORD /d "0" /f
REM // 天気予報を非表示
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds" /v "ShellFeedsTaskbarViewMode" /t REG_DWORD /d "2" /f

REM // エクスプローラー
REM // クイックアクセスの設定を変更
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "LaunchTo" /t REG_DWORD /d "1" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer" /v "ShowRecent" /t REG_DWORD /d "0" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer" /v "ShowFrequent" /t REG_DWORD /d "0" /f
REM // 拡張子を常に表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d "0" /f
REM // すべてのフォルダーを表示
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "NavPaneShowAllFolders" /t REG_DWORD /d "1" /f
REM // 可用性の状態を常に表示
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "NavPaneShowAllCloudStates" /t REG_DWORD /d "1" /f
REM // 常に開いてるフォルダーまで展開
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "NavPaneExpandToCurrentFolder" /t REG_DWORD /d "1" /f
REM // タイトルバーに完全なパスを表示
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" /v "FullPath" /t REG_DWORD /d "1" /f
REM // 項目間のスペースを減らす
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "UseCompactMode" /t REG_DWORD /d "1" /f
REM // 別のプロセスでフォルダー ウィンドウを開く
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "SeparateProcess" /t REG_DWORD /d "1" /f
REM // 右クリックをWindows10以前のものに戻す
reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
REM // 検索結果を詳細表示にする
reg delete "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU" /f
reg delete "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags" /f
reg add "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell\{7fde1a1e-8b31-49a5-93b8-6be14cfa4943}" /v "LogicalViewMode" /t REG_DWORD /d "1" /f
reg add "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell\{7fde1a1e-8b31-49a5-93b8-6be14cfa4943}" /v "Mode" /t REG_DWORD /d "4" /f
REM // メディア挿入時の自動再生をオフ
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers" /v "DisableAutoplay" /t REG_DWORD /d "1" /f

REM // Windows IME関係
REM // 以前のIMEを使用する
reg add "HKEY_CURRENT_USER\Software\Microsoft\Input\TSF\Tsf3Override\{03b5835f-f03c-411b-9ce2-aa23e1171e36}" /v "NoTsf3Override2" /t REG_DWORD /d "1" /f

REM // コントロールパネル
REM // コントロールパネルの表示をすべて開く・小さいアイコンに変更
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" /v AllItemsIconView /t REG_DWORD /d 1 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel" /v StartupPage /t REG_DWORD /d 1 /f

REM // 電源
REM // 動再起動を行わないアクティブ時間を12時~6時に設定
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursStart /d 12 /t REG_DWORD /f
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursEnd /d 6 /t REG_DWORD /f
REM // 電源設定を変更 モニタの電源オフを [電源接続時:60分・バッテリ駆動時:10分]に変更
powercfg /change monitor-timeout-ac 60
powercfg /change monitor-timeout-dc 10
REM // 電源設定を変更 スタンバイに落ちる時間 [電源接続時:スタンバイ無し・バッテリ駆動時:スタンバイ無し]に変更
REM // よくよく考えたらノートでスタンバイに落ちないのはアカンので無効化しておく
REM powercfg /x standby-timeout-ac 0
REM powercfg /x standby-timeout-dc 0

REM // Windowsその他
REM // 画面をダークモードにする
REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f
REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f
REM // 壁紙の変更を行う
xcopy "%~dp0\resource\wallpaper\*.*" %USERPROFILE%\Pictures\wallpaper\ /S /Y
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "Wallpaper" /t REG_SZ /d "C:\SETUP\resource\wallpaper\redmoon.jpg" /f
REM // プリントスクリーンキーで画面切り取りを開くように設定
reg add "HKEY_CURRENT_USER\Control Panel\Keyboard" /v "PrintScreenKeyForSnippingEnabled" /t REG_DWORD /d "1" /f
REM // 新機能とおすすめを確認するために、更新の後と、サインイン時にときどき、[Windows へようこそ]の情報を表示する 「オフ」
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f
REM // Windows を最大限に活用するためのデバイス設定の完了方法を提案する 「オフ」
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement" /v "ScoobeSystemSettingEnabled" /t REG_DWORD /d 0 /f
REM // Windows を使う上でのヒントやお勧めの方法を取得する 「オフ」
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f
REM // 新機能とおすすめを確認するために~をオフ
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d "0" /f
REM // メモリ整合性をオフ とりあえず外しておくが記載は残す
REM reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v Enabled /t REG_DWORD /d 0 /f

REM // EDGE
REM // SmartScreenを無効にする
reg add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PhishingFilter" /v "EnabledV9" /t REG_DWORD /d "0" /f

REM // (おまじない)
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Discord"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Steam"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Skype for Desktop"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "com.squirrel.slack.slack"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "GoogleDriveFS"
REM reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "OneDrive"
REM // TASKKILL
taskkill /IM "Discord.exe"
taskkill /IM "steam.exe"
taskkill /IM "Skype.exe"
taskkill /IM "Slack.exe"
taskkill /IM "GoogleDriveFS.exe"
taskkill /IM "DropBox.exe"
taskkill /IM "AsVideoConv.exe"
taskkill /IM "PowerToys.settings.exe"

CLS
REM // ============================================================
REM // WinGetコマンドによるアプリケーションの一括導入
ECHO 【Stage 4/7】WinGetコマンドによるアプリケーションの一括導入を行います

REM //ネットワーク接続をチェックし、未接続の場合はポーズをかける
ping 5893.jp -n 1 > nul
if %errorlevel% == 0 (
    @echo ネットワークの接続を確認しました。処理を継続します。
) else (
    @echo ネットワークに接続されていないようです。ネットワークに接続後、処理を継続してください。
    pause
)
REM // WinGetコマンドを使えるように最新のアプリインストーラーを導入
REM // →時間かかるけどWEBからダウンロードさせる方式に変更
REM powershell -Command "Add-AppxPackage -Path C:\SETUP\resource\winget.msixbundle"

REM // WinGetコマンドを使えるように最新のアプリインストーラーを導入(WEB DL&Install)
MD c:\SETUP
cd c:\SETUP
powershell Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.0" -OutFile "C:\SETUP\Microsoft.UI.Xaml.2.7.nupkg.zip"
powershell Expand-Archive "C:\SETUP\Microsoft.UI.Xaml.2.7.nupkg.zip" -DestinationPath C:\SETUP\Microsoft.UI.Xaml.2.7.nupkg
powershell Add-AppxPackage "C:\SETUP\Microsoft.UI.Xaml.2.7.nupkg\tools\AppX\x64\Release\Microsoft.UI.Xaml.2.7.appx"
powershell Invoke-WebRequest -Uri "https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile C:\SETUP\Microsoft.VCLibs.x64.14.00.Desktop.appx"
powershell Add-AppxPackage "C:\SETUP\Microsoft.VCLibs.x64.14.00.Desktop.appx"
powershell Start-BitsTransfer -Source https://github.com/microsoft/winget-cli/releases/download/v1.6.3482/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -destination c:\setup\winget.msixbundle
powershell -Command "Add-AppxPackage -Path C:\SETUP\winget.msixbundle"

REM // ブラウザ
powershell winget install --id Google.Chrome --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Google.ChromeRemoteDesktop --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Mozilla.FireFox --force --silent --accept-package-agreements --accept-source-agreements

REM // ネット系
powershell winget install --id brackets-cont.brackets --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Microsoft.VisualStudioCode --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id LINE.LINE --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Microsoft.Skype --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Discord.Discord --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id SlackTechnologies.Slack --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Zoom.Zoom --force --silent --accept-package-agreements --accept-source-agreements

REM // アプリ
powershell winget install --id FastCopy.FastCopy --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Rufus.Rufus --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id DropBox.DropBox --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id Google.GoogleDrive --force --silent --accept-package-agreements --accept-source-agreements
REM powershell winget install --id Google.JapaneseIME --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id FastStone.Viewer --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id LIGHTNINGUK.ImgBurn --force --silent --accept-package-agreements --accept-source-agreements

REM // システム系 CrystalシリーズはDLにむっちゃ時間かかるので泣く泣くREM 雫ちゃん可愛いFRP工芸品にしたい
powershell winget install --id CPUID.CPU-Z --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id CPUID.HWMonitor --force --silent --accept-package-agreements --accept-source-agreements
REM powershell winget install --id CrystalDewWorld.CrystalDiskInfo.ShizukuEdition --force --silent --accept-package-agreements --accept-source-agreements
REM powershell winget install --id CrystalDewWorld.CrystalDiskMark.ShizukuEdition --force --silent --accept-package-agreements --accept-source-agreements

REM // メディア系
powershell winget install --id Apple.iTunes --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id VideoLAN.VLC --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id CodecGuide.K-LiteCodecPack.Standard --force --silent --accept-package-agreements --accept-source-agreements

REM // ゲーム
powershell winget install --id Valve.Steam --force --silent --accept-package-agreements --accept-source-agreements
powershell winget install --id DMM.GamePlayer --force --silent --accept-package-agreements --accept-source-agreements

CLS
REM // ============================================================
REM // アプリケーションの一括導入
ECHO 【Stage 5/7】アプリケーションの一括導入を行います

REM // アプリ
"%~dp0\resource\VC_redist.x64.exe" /quiet /norestart
"%~dp0\resource\explz887_x64_silent.exe"
"%~dp0\resource\hm919_signed\hmsetup.exe" /h

REM // メディア系
%~dp0\resource\AsVideoConv_7.20.1_Setup.exe /SILENT

REM // 今は自動起動させない(必要なら後でやる)
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Discord"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Steam"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Skype for Desktop"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "com.squirrel.slack.slack"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "GoogleDriveFS"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "OneDrive"
reg delete "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "Device Detector"
reg add "HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Env" /v "Resident" /t REG_DWORD /d "1" /f
del /F /Q "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\秀丸.lnk"

REM // 追加設定
REM // EXPLZH ZoneID未確認でも警告出さない
reg add "HKEY_CURRENT_USER\Software\Pon\Arcext\Settings" /v "NTFSZoneId" /t REG_DWORD /d "0" /f

REM // TASKKILL
taskkill /F /IM "Discord.exe"
taskkill /F /IM "steam.exe"
taskkill /F /IM "Skype.exe"
taskkill /F /IM "Slack.exe"
taskkill /F /IM "GoogleDriveFS.exe"
taskkill /F /IM "DropBox.exe"
taskkill /F /IM "AsVideoConv.exe"
taskkill /F /IM "PowerToys.settings.exe"

CLS
REM // ============================================================
REM // 不要なアプリ削除
REM // 再インストールは > https://answers.microsoft.com/ja-jp/windows/forum/all/windows-10/239ef7e9-9f4f-40dc-bf41-2cd2b8217843
ECHO 【Stage 6/7】Windows10/11の不要な標準アプリの削除を行う

REM // Cortana
powershell -Command "Get-AppxPackage Microsoft.549981C3F5F10 | Remove-AppxPackage"
REM // Disney+
powershell -Command "Get-AppxPackage Disney.37853FC22B2CE | Remove-AppxPackage"
REM // Spotify
powershell -Command "Get-AppxPackage SpotifyAB.SpotifyMusic | Remove-AppxPackage"
REM // スマホ同期
powershell -Command "Get-AppxPackage Microsoft.YourPhone | Remove-AppxPackage"
REM // 天気
powershell -Command "Get-AppxPackage Microsoft.BingWeather | Remove-AppxPackage"
REM // ヒント
powershell -Command "Get-AppxPackage Microsoft.Getstarted | Remove-AppxPackage"
REM // フィードバックHUB
powershell -Command "Get-AppxPackage Microsoft.WindowsFeedbackHub | Remove-AppxPackage"
REM // マップ
powershell -Command "Get-AppxPackage Microsoft.WindowsMaps | Remove-AppxPackage"
REM // メールとカレンダー
powershell -Command "Get-AppxPackage microsoft.windowscommunicationsapps | Remove-AppxPackage"
REM // Office on the Web
powershell -Command "Get-AppxPackage Microsoft.MicrosoftOfficeHub | Remove-AppxPackage"
REM // Solitaire
powershell -Command "Get-AppxPackage Microsoft.MicrosoftSolitaireCollection | Remove-AppxPackage"

CLS
REM // ============================================================
REM // WindowsUpdate
ECHO 【Stage 7/7】WindowsUpdateの実行と最終設定 *やっぱり動いてない気がする
UsoClient startscan
UsoClient StartInstall
UsoClient StartInteractiveScan

CLS
REM // ============================================================
REM // PC名の変更
ECHO コンピュータ名前を変更できます。ここで変更しない場合はそのままエンターを入力してください。
ECHO >新しいコンピュータ名を入力してください。(※変更は再起動後に反映されます。)
SET /p RENBAN=""
wmic computersystem where name="%computername%" call rename name="%renban%"
ECHO;

REM // 自動ログイン
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v DevicePasswordLessBuildVersion /t REG_DWORD /d 0 /f
start netplwiz

基本的にはバッチファイルのコメントを見ればわかるように書いてますが、少し補足を記載します。

REM // ============================================================
REM // Windowsの初期設定
ECHO 【Stage 3/7】Windowsの初期設定を行います

 ~

REM // 壁紙の変更を行う
xcopy "%~dp0\resource\wallpaper\*.*" %USERPROFILE%\Pictures\wallpaper\ /S /Y
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /vw "Wallpaper" /t REG_SZ /d "C:\SETUP\resource\wallpaper\kohakusan_oppai.jpg" /f

>xcopy “%~dp0\resource\wallpaper*.*” %USERPROFILE%\Pictures\wallpaper\ /S /Y

USBメモリの\sources\$OEM$\$1\SETUP\resource\wallpaper (=C:\SETUP\resource\wallpaper)フォルダを自分のピクチャフォルダにコピーするというコマンドになっています。事前に当該フォルダを作成し、お気に入りの画像を突っ込んでおけば自動的にコピーがされます。

>reg add “HKEY_CURRENT_USER\Control Panel\Desktop” /vw “Wallpaper” /t REG_SZ /d “C:\SETUP\resource\wallpaper\kohakusan_oppai.jpg” /f

USBメモリの\sources\$OEM$\$1\SETUP\resource\wallpaper (=C:\SETUP\resource\wallpaper)フォルダにあるkohakusan_oppai.jpgを壁紙として設定するコマンドになっています。

いずれも必要に応じてファイルを準備しておいてください。

REM // ============================================================
REM // WinGetコマンドによるアプリケーションの一括導入
ECHO 【Stage 4/7】WinGetコマンドによるアプリケーションの一括導入を行います

 ~

powershell winget install --id Google.Chrome --force --silent --accept-package-agreements --accept-source-agreements
 ・
 ・
 ・

wingetコマンドを使用して、各種ソフトを自動的にダウンロード&インストールを行うようになっています。

他にも導入可能なソフトが山のようにありますので、winget.run あたりで検索して付け加えてみましょう。

☆Adobe Acrobat Reader

powershell winget install –id Adobe.Acrobat.Reader.64-bit –force –silent –accept-package-agreements –accept-source-agreements

☆7zip

powershell winget install –id 7zip.7zip –force –silent –accept-package-agreements –accept-source-agreements

☆Google日本語入力

powershell winget install –id Google.JapaneseIME –force –silent –accept-package-agreements –accept-source-agreements

☆JDownload2

powershell winget install –id AppWork.JDownloader –force –silent –accept-package-agreements –accept-source-agreements

☆GoogleDrive

powershell winget install –id Google.GoogleDrive –force –silent –accept-package-agreements –accept-source-agreements

☆LibreOffice

powershell winget install –id TheDocumentFoundation.LibreOffice –force –silent –accept-package-agreements –accept-source-agreements

☆GIMP

powershell winget install –id GIMP.GIMP –force –silent –accept-package-agreements –accept-source-agreements

☆HandBrake

powershell winget install –id HandBrake –force –silent –accept-package-agreements –accept-source-agreements

☆WinSCP

powershell winget install –id WinSCP.WinSCP –force –silent –accept-package-agreements –accept-source-agreements

☆TeraTerm

powershell winget install –id TeraTermProject.teraterm –force –silent –accept-package-agreements –accept-source-agreements

このあたりもお勧めです。個人的には「全自動でインストールさせて、いらないものだけ後で消す」というのがスマートだと思っています。

REM // ============================================================
REM // アプリケーションの一括導入
ECHO 【Stage 5/7】アプリケーションの一括導入を行います

 ~

REM // アプリ
"%~dp0\resource\VC_redist.x64.exe" /quiet /norestart
"%~dp0\resource\explz887_x64_silent.exe"
"%~dp0\resource\hm919_signed\hmsetup.exe" /h

REM // メディア系
%~dp0\resource\AsVideoConv_7.20.1_Setup.exe /SILENT

この辺りは、wingetでインストールできないソフトの導入部分となります。あらかじめ必要なプログラムを準備して、USBメモリの\sources\$OEM$\$1\SETUP\resource\の中に配置しておいてください。

今回は、Visual C++ 再頒布可能パッケージ、EXPLZH(サイレントインストール版)秀丸エディタAsVideoConverterを例として記述しています。いずれも /quiet /norestartなどのオプションの指定、もしくはサイレントインストールパッケージである必要があります。

改めて、USBメモリの状況を整理します。

root
AutoUnattend.xml ←上の記事からコピペ&編集して準備
┗\sources
 ┗\$OEM$ ←フォルダを作る
  ┗\$1 ←作る
   ┗\SETUP ←作る
     ┣setup.bat ←上の記事からコピペして準備
     ┗\resource ←作る EXPLZHや秀丸などのアプリ配置
       ┗\wallpaper ←作る 壁紙を入れておく

こういった構成になっていればOKです。

あとは、作成したUSBメモリから起動して、OSのエディションを選んだ後にインストールするディスクを選べば、Windowsセットアップとバッチファイルが初期設定などを行い、コンピューター名を聞いてくる所まで自動的に走ります。

コンピューター名を設定後、WindowsUpdateをかけて再起動したらChromeやFireFoxなどの初期設定を行ってください。

enjoy!

【追記】

「何でもいいからさっさと試したい!!!という人は、セットアップ用USBメモリを作って(Windows10 / Windows11)、ここからファイルをダウンロードしてUSBメモリに展開してください。

Windowsユーザー : kohaku
Windowsパスワード : san
表示名・使用者 : 琥珀

以上の設定で自動セットアップがお試しいただけます。壁紙つき。