separated church and state
This commit is contained in:
1 parent
b9a8ded252
commit
c4d42aa54c
7 files changed
+548
-80
No files matched your search
@@ -0,0 +1,311 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
============================================================================
|
||||
autounattend.xml - Windows 10 Enterprise LTSC 2021 (21H2), x64
|
||||
Target: Physical desktops/laptops AND virtual machines, UEFI or BIOS
|
||||
Storage: Any. VirtIO drivers load automatically if a virtio-win ISO is
|
||||
attached; otherwise use "Load driver" on the disk screen.
|
||||
Behavior: STOPS at "Where do you want to install Windows?" so you pick
|
||||
(and delete/format) partitions yourself - nothing is wiped
|
||||
without you. Then installs, autologons ONCE, installs VirtIO
|
||||
guest tools if a virtio-win disc is present, and downloads and
|
||||
runs oobe-desktop.ps1 from https://url.isworking.fyi/oobe-desktop.
|
||||
|
||||
BUILD: ./build-isos.sh produces build/desktop.iso with this file as
|
||||
autounattend.xml plus oobe-desktop.ps1 (offline fallback).
|
||||
VM: attach it as a second CD next to the LTSC ISO.
|
||||
PC: copy autounattend.xml and oobe-desktop.ps1 to the root of
|
||||
the LTSC install USB (or a second USB stick).
|
||||
|
||||
Credentials baked in below: labadmin / mdwelcome (stored in CLEAR TEXT)
|
||||
Search for "EDIT" to find every value you probably want to change.
|
||||
============================================================================
|
||||
-->
|
||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
||||
|
||||
<!-- =======================================================================
|
||||
PASS 1: windowsPE
|
||||
======================================================================= -->
|
||||
<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">
|
||||
<SetupUILanguage>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
</SetupUILanguage>
|
||||
<InputLocale>0409:00000409</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
|
||||
<!-- ===============================================================
|
||||
VIRTIO DRIVER INJECTION - the load-bearing part.
|
||||
WinPE has no viostor/vioscsi driver, so without this the vdisk is
|
||||
invisible on the disk screen. On physical PCs these paths don't
|
||||
exist and are skipped; the disk screen's Load Driver button is
|
||||
still available for anything else (RAID/VMD/NVMe controllers).
|
||||
|
||||
Drive letters in WinPE are not deterministic: the LTSC disc and the
|
||||
VirtIO disc land on D:/E: in either order, so both are listed, plus
|
||||
F: as insurance. Setup logs a warning for paths that don't exist
|
||||
and continues, so the extra entries cost nothing.
|
||||
|
||||
viostor = VirtIO block bus (Unraid vdisk bus: virtio)
|
||||
vioscsi = VirtIO SCSI bus (Unraid vdisk bus: virtio-scsi)
|
||||
NetKVM = network, so WinPE has connectivity if you ever need it
|
||||
=============================================================== -->
|
||||
<component name="Microsoft-Windows-PnpCustomizationsWinPE"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<DriverPaths>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="1">
|
||||
<Path>D:\viostor\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="2">
|
||||
<Path>E:\viostor\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="3">
|
||||
<Path>F:\viostor\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="4">
|
||||
<Path>D:\vioscsi\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="5">
|
||||
<Path>E:\vioscsi\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="6">
|
||||
<Path>F:\vioscsi\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="7">
|
||||
<Path>D:\NetKVM\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="8">
|
||||
<Path>E:\NetKVM\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
<PathAndCredentials wcm:action="add" wcm:keyValue="9">
|
||||
<Path>F:\NetKVM\w10\amd64</Path>
|
||||
</PathAndCredentials>
|
||||
</DriverPaths>
|
||||
</component>
|
||||
|
||||
<component name="Microsoft-Windows-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
|
||||
<!-- No DiskConfiguration and no InstallTo on purpose: Setup prompts
|
||||
for the target disk/partition, which is the only screen shown. -->
|
||||
|
||||
<ImageInstall>
|
||||
<OSImage>
|
||||
<InstallFrom>
|
||||
<MetaData wcm:action="add">
|
||||
<Key>/IMAGE/INDEX</Key>
|
||||
<Value>1</Value>
|
||||
</MetaData>
|
||||
</InstallFrom>
|
||||
<WillShowUI>OnError</WillShowUI>
|
||||
</OSImage>
|
||||
</ImageInstall>
|
||||
|
||||
<UserData>
|
||||
<!-- EDIT: generic KMS client key for Enterprise LTSC 2021. Gets Setup
|
||||
past the prompt; does NOT activate. N edition is
|
||||
92NFX-8DJQP-P6BBQ-THF9C-7CG2H. -->
|
||||
<ProductKey>
|
||||
<Key>M7XTQ-FN8P6-TTKYV-9D4CC-J462D</Key>
|
||||
<WillShowUI>OnError</WillShowUI>
|
||||
</ProductKey>
|
||||
<AcceptEula>true</AcceptEula>
|
||||
<FullName>IT</FullName>
|
||||
<Organization>Contoso</Organization>
|
||||
</UserData>
|
||||
|
||||
</component>
|
||||
</settings>
|
||||
|
||||
<!-- =======================================================================
|
||||
PASS 2: specialize
|
||||
======================================================================= -->
|
||||
<settings pass="specialize">
|
||||
|
||||
<component name="Microsoft-Windows-Shell-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<!-- "*" = random name. A literal name must NOT match any local account. -->
|
||||
<ComputerName>*</ComputerName>
|
||||
<!-- EDIT: `tzutil /l` lists every valid value. -->
|
||||
<TimeZone>Pacific Standard Time</TimeZone>
|
||||
<RegisteredOwner>IT</RegisteredOwner>
|
||||
<RegisteredOrganization>Contoso</RegisteredOrganization>
|
||||
</component>
|
||||
|
||||
<component name="Microsoft-Windows-Security-SPP-UX"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<SkipAutoActivation>true</SkipAutoActivation>
|
||||
</component>
|
||||
|
||||
<!-- RDP on (NLA required) so the machine is reachable remotely. -->
|
||||
<component name="Microsoft-Windows-TerminalServices-LocalSessionManager"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<fDenyTSConnections>false</fDenyTSConnections>
|
||||
</component>
|
||||
|
||||
<component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<UserAuthentication>1</UserAuthentication>
|
||||
<SecurityLayer>2</SecurityLayer>
|
||||
</component>
|
||||
|
||||
</settings>
|
||||
|
||||
<!-- =======================================================================
|
||||
PASS 3: oobeSystem
|
||||
======================================================================= -->
|
||||
<settings pass="oobeSystem">
|
||||
|
||||
<component name="Microsoft-Windows-International-Core"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
<InputLocale>0409:00000409</InputLocale>
|
||||
<SystemLocale>en-US</SystemLocale>
|
||||
<UILanguage>en-US</UILanguage>
|
||||
<UserLocale>en-US</UserLocale>
|
||||
</component>
|
||||
|
||||
<component name="Microsoft-Windows-Shell-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
|
||||
|
||||
<OOBE>
|
||||
<HideEULAPage>true</HideEULAPage>
|
||||
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
|
||||
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
|
||||
<HideLocalAccountScreen>true</HideLocalAccountScreen>
|
||||
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
|
||||
<NetworkLocation>Work</NetworkLocation>
|
||||
<ProtectYourPC>3</ProtectYourPC>
|
||||
</OOBE>
|
||||
|
||||
<!-- ===============================================================
|
||||
ACCOUNTS - password is mdwelcome, in clear text, three times.
|
||||
Treat this file and the merged ISO as secrets.
|
||||
=============================================================== -->
|
||||
<UserAccounts>
|
||||
<AdministratorPassword>
|
||||
<Value>mdwelcome</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</AdministratorPassword>
|
||||
|
||||
<LocalAccounts>
|
||||
<LocalAccount wcm:action="add">
|
||||
<Name>labadmin</Name>
|
||||
<DisplayName>Lab Admin</DisplayName>
|
||||
<Description>Local administrator for automated builds</Description>
|
||||
<Group>Administrators</Group>
|
||||
<Password>
|
||||
<Value>mdwelcome</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
</LocalAccount>
|
||||
</LocalAccounts>
|
||||
</UserAccounts>
|
||||
|
||||
<!-- Autologon ONCE, just long enough for the FirstLogonCommands. After
|
||||
oobe-desktop.ps1 restarts the PC it lands on the sign-in screen. -->
|
||||
<AutoLogon>
|
||||
<Enabled>true</Enabled>
|
||||
<Username>labadmin</Username>
|
||||
<LogonCount>1</LogonCount>
|
||||
<Password>
|
||||
<Value>mdwelcome</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
</AutoLogon>
|
||||
|
||||
<DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet>
|
||||
|
||||
<!-- ===============================================================
|
||||
FIRST LOGON COMMANDS - run once, elevated, as labadmin.
|
||||
=============================================================== -->
|
||||
<FirstLogonCommands>
|
||||
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>1</Order>
|
||||
<Description>Show file extensions</Description>
|
||||
<CommandLine>reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>2</Order>
|
||||
<Description>Allow signed PowerShell scripts</Description>
|
||||
<CommandLine>powershell -NoProfile -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force"</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
<!-- VMs only: if a virtio-win disc is attached, install the guest
|
||||
tools (NetKVM is needed before anything can be downloaded). On
|
||||
physical PCs no drive has the installer and this does nothing. Scans every drive for
|
||||
the installer rather than assuming a letter, since the VirtIO
|
||||
disc moves around post-install. -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>3</Order>
|
||||
<Description>Install VirtIO guest tools</Description>
|
||||
<CommandLine>powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Volume | Where-Object DriveLetter | ForEach-Object { $exe = $_.DriveLetter + ':\virtio-win-guest-tools.exe'; if (Test-Path $exe) { Start-Process $exe -ArgumentList '/install','/quiet','/norestart' -Wait } }"</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
<!-- Provisioning: pulls oobe-desktop.ps1 from the repo so the PC always
|
||||
gets the current version, retrying for ~2.5 minutes while the
|
||||
network comes up. If that fails, falls back to the copy of
|
||||
oobe-desktop.ps1 baked into the root of the ISO. The script installs
|
||||
the MeshCentral agent, applies the power/RDP/SSH settings and
|
||||
restarts the PC itself, so this must stay the LAST command.
|
||||
Log: C:\ProgramData\OOBE\oobe-desktop.log -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>4</Order>
|
||||
<Description>Run oobe-desktop.ps1 (url.isworking.fyi, else ISO copy)</Description>
|
||||
<CommandLine>powershell -NoProfile -ExecutionPolicy Bypass -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $s = $null; for ($i = 1; $i -le 10; $i++) { try { $s = Invoke-RestMethod 'https://url.isworking.fyi/oobe-desktop'; break } catch { Start-Sleep -Seconds 15 } }; if (-not $s) { $f = Get-PSDrive -PSProvider FileSystem | ForEach-Object { Join-Path $_.Root 'oobe-desktop.ps1' } | Where-Object { Test-Path $_ } | Select-Object -First 1; if ($f) { $s = Get-Content -Raw $f } }; if ($s) { Invoke-Expression $s } else { Write-Warning 'oobe-desktop.ps1 not found online or on any drive'; Start-Sleep -Seconds 60 }"</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
</FirstLogonCommands>
|
||||
</component>
|
||||
</settings>
|
||||
|
||||
</unattend>
|
||||
|
||||
+25
-13
@@ -5,12 +5,12 @@
|
||||
Target: Unraid / KVM virtual machine, UEFI firmware, GPT disk
|
||||
Storage: VirtIO (or VirtIO-SCSI) vdisk - drivers injected into WinPE
|
||||
Behavior: Wipes Disk 0, creates ESP/MSR/Windows, installs, autologons,
|
||||
then runs oobe-ltsc.ps1 (VirtIO guest tools, MeshCentral, settings).
|
||||
installs the VirtIO guest tools, then downloads and runs
|
||||
oobe-vms.ps1 from https://url.isworking.fyi/oobe-vms.
|
||||
|
||||
PLACE AT: the ROOT of the merged VirtIO ISO, renamed to autounattend.xml,
|
||||
alongside virtio-win-guest-tools.exe AND oobe-ltsc.ps1. The ISO
|
||||
needs Joliet names so oobe-ltsc.ps1 isn't mangled to 8.3.
|
||||
Attach that ISO in the Unraid VM's
|
||||
BUILD: ./build-isos.sh produces build/virtio-vms.iso with this file as
|
||||
autounattend.xml plus oobe-vms.ps1 (offline fallback) at the
|
||||
root of the latest virtio-win ISO. Attach that ISO in the Unraid VM's
|
||||
"VirtIO Drivers ISO" slot; leave "OS Install ISO" on the LTSC image.
|
||||
|
||||
>>> DESTRUCTIVE: WillWipeDisk erases Disk 0 with no prompt. <<<
|
||||
@@ -325,16 +325,28 @@
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
<!-- Provisioning: oobe-ltsc.ps1 sits at the root of the merged ISO
|
||||
next to this file. Scans every drive for it rather than assuming
|
||||
a letter, since the VirtIO disc moves around post-install.
|
||||
The script installs the VirtIO guest tools, MeshCentral agent,
|
||||
power/RDP/SSH settings, then restarts the VM itself, so this
|
||||
must stay the LAST command. Log: C:\ProgramData\OOBE\oobe-ltsc.log -->
|
||||
<!-- NetKVM has to be in place before anything can be downloaded, so
|
||||
the guest tools go on from the ISO first. Scans every drive for
|
||||
the installer rather than assuming a letter, since the VirtIO
|
||||
disc moves around post-install. -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>3</Order>
|
||||
<Description>Run oobe-ltsc.ps1 provisioning script</Description>
|
||||
<CommandLine>powershell -NoProfile -ExecutionPolicy Bypass -Command "$s = Get-PSDrive -PSProvider FileSystem | ForEach-Object { Join-Path $_.Root 'oobe-ltsc.ps1' } | Where-Object { Test-Path $_ } | Select-Object -First 1; if ($s) { & $s } else { Write-Warning 'oobe-ltsc.ps1 not found on any drive'; Start-Sleep -Seconds 60 }"</CommandLine>
|
||||
<Description>Install VirtIO guest tools</Description>
|
||||
<CommandLine>powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Volume | Where-Object DriveLetter | ForEach-Object { $exe = $_.DriveLetter + ':\virtio-win-guest-tools.exe'; if (Test-Path $exe) { Start-Process $exe -ArgumentList '/install','/quiet','/norestart' -Wait } }"</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
<!-- Provisioning: pulls oobe-vms.ps1 from the repo so the VM always
|
||||
gets the current version, retrying for ~2.5 minutes while the
|
||||
network comes up. If that fails, falls back to the copy of
|
||||
oobe-vms.ps1 baked into the root of the ISO. The script installs
|
||||
the MeshCentral agent, applies the power/RDP/SSH settings and
|
||||
restarts the VM itself, so this must stay the LAST command.
|
||||
Log: C:\ProgramData\OOBE\oobe-vms.log -->
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>4</Order>
|
||||
<Description>Run oobe-vms.ps1 (url.isworking.fyi, else ISO copy)</Description>
|
||||
<CommandLine>powershell -NoProfile -ExecutionPolicy Bypass -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $s = $null; for ($i = 1; $i -le 10; $i++) { try { $s = Invoke-RestMethod 'https://url.isworking.fyi/oobe-vms'; break } catch { Start-Sleep -Seconds 15 } }; if (-not $s) { $f = Get-PSDrive -PSProvider FileSystem | ForEach-Object { Join-Path $_.Root 'oobe-vms.ps1' } | Where-Object { Test-Path $_ } | Select-Object -First 1; if ($f) { $s = Get-Content -Raw $f } }; if ($s) { Invoke-Expression $s } else { Write-Warning 'oobe-vms.ps1 not found online or on any drive'; Start-Sleep -Seconds 60 }"</CommandLine>
|
||||
<RequiresUserInput>false</RequiresUserInput>
|
||||
</SynchronousCommand>
|
||||
|
||||
|
||||
Reference in new issue
Block a user