Last active
October 19, 2025 17:12
-
-
Save michael-o/9fab1055f39bad556b094997b7b507c7 to your computer and use it in GitHub Desktop.
Minimal Windows 11 Setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?xml version="1.0" encoding="utf-8"?> | |
| <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> | |
| <!--https://schneegans.de/windows/unattend-generator/?LanguageMode=Interactive&ProcessorArchitecture=amd64&BypassRequirementsCheck=true&BypassNetworkCheck=true&ComputerNameMode=Random&CompactOsMode=Default&TimeZoneMode=Implicit&PartitionMode=Interactive&DiskAssertionMode=Skip&WindowsEditionMode=Interactive&InstallFromMode=Automatic&PEMode=Default&UserAccountMode=Unattended&AccountName0=User&AccountDisplayName0=&AccountPassword0=&AccountGroup0=Administrators&AutoLogonMode=Own&PasswordExpirationMode=Default&LockoutMode=Default&HideFiles=Hidden&TaskbarSearch=Box&TaskbarIconsMode=Default&StartTilesMode=Default&StartPinsMode=Default&EffectsMode=Default&DesktopIconsMode=Default&StartFoldersMode=Default&WifiMode=Interactive&ExpressSettings=DisableAll&LockKeysMode=Skip&StickyKeysMode=Default&ColorMode=Default&WallpaperMode=Default&LockScreenMode=Default&Remove3DViewer=true&RemoveBingSearch=true&RemoveCalculator=true&RemoveCamera=true&RemoveClipchamp=true&RemoveClock=true&RemoveCopilot=true&RemoveCortana=true&RemoveDevHome=true&RemoveWindowsHello=true&RemoveFamily=true&RemoveFeedbackHub=true&RemoveGameAssist=true&RemoveGetHelp=true&RemoveHandwriting=true&RemoveInternetExplorer=true&RemoveMailCalendar=true&RemoveMaps=true&RemoveMathInputPanel=true&RemoveMediaFeatures=true&RemoveMixedReality=true&RemoveZuneVideo=true&RemoveNews=true&RemoveNotepad=true&RemoveOffice365=true&RemoveOneDrive=true&RemoveOneNote=true&RemoveOneSync=true&RemoveOpenSSHClient=true&RemoveOutlook=true&RemovePaint=true&RemovePaint3D=true&RemovePeople=true&RemovePhotos=true&RemovePowerAutomate=true&RemovePowerShell2=true&RemovePowerShellISE=true&RemoveQuickAssist=true&RemoveRecall=true&RemoveRdpClient=true&RemoveSkype=true&RemoveSnippingTool=true&RemoveSolitaire=true&RemoveSpeech=true&RemoveStepsRecorder=true&RemoveStickyNotes=true&RemoveTeams=true&RemoveGetStarted=true&RemoveToDo=true&RemoveVoiceRecorder=true&RemoveWallet=true&RemoveWeather=true&RemoveFaxAndScan=true&RemoveWindowsMediaPlayer=true&RemoveZuneMusic=true&RemoveWindowsTerminal=true&RemoveWordPad=true&RemoveXboxApps=true&RemoveYourPhone=true&WdacMode=Skip--> | |
| <settings pass="offlineServicing"></settings> | |
| <settings pass="windowsPE"> | |
| <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> | |
| <UserData> | |
| <ProductKey> | |
| <Key>00000-00000-00000-00000-00000</Key> | |
| <WillShowUI>Always</WillShowUI> | |
| </ProductKey> | |
| <AcceptEula>true</AcceptEula> | |
| </UserData> | |
| <UseConfigurationSet>false</UseConfigurationSet> | |
| <RunSynchronous> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>1</Order> | |
| <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>2</Order> | |
| <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>3</Order> | |
| <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> | |
| </RunSynchronousCommand> | |
| </RunSynchronous> | |
| </component> | |
| </settings> | |
| <settings pass="generalize"></settings> | |
| <settings pass="specialize"> | |
| <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> | |
| <RunSynchronous> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>1</Order> | |
| <Path>powershell.exe -WindowStyle Normal -NoProfile -Command "$xml = [xml]::new(); $xml.Load('C:\Windows\Panther\unattend.xml'); $sb = [scriptblock]::Create( $xml.unattend.Extensions.ExtractScript ); Invoke-Command -ScriptBlock $sb -ArgumentList $xml;"</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>2</Order> | |
| <Path>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\Specialize.ps1' -Raw | Invoke-Expression;"</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>3</Order> | |
| <Path>reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>4</Order> | |
| <Path>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\DefaultUser.ps1' -Raw | Invoke-Expression;"</Path> | |
| </RunSynchronousCommand> | |
| <RunSynchronousCommand wcm:action="add"> | |
| <Order>5</Order> | |
| <Path>reg.exe unload "HKU\DefaultUser"</Path> | |
| </RunSynchronousCommand> | |
| </RunSynchronous> | |
| </component> | |
| </settings> | |
| <settings pass="auditSystem"></settings> | |
| <settings pass="auditUser"></settings> | |
| <settings pass="oobeSystem"> | |
| <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> | |
| <UserAccounts> | |
| <LocalAccounts> | |
| <LocalAccount wcm:action="add"> | |
| <Name>User</Name> | |
| <DisplayName></DisplayName> | |
| <Group>Administrators</Group> | |
| <Password> | |
| <Value></Value> | |
| <PlainText>true</PlainText> | |
| </Password> | |
| </LocalAccount> | |
| </LocalAccounts> | |
| </UserAccounts> | |
| <AutoLogon> | |
| <Username>User</Username> | |
| <Enabled>true</Enabled> | |
| <LogonCount>1</LogonCount> | |
| <Password> | |
| <Value></Value> | |
| <PlainText>true</PlainText> | |
| </Password> | |
| </AutoLogon> | |
| <OOBE> | |
| <ProtectYourPC>3</ProtectYourPC> | |
| <HideEULAPage>true</HideEULAPage> | |
| <HideWirelessSetupInOOBE>false</HideWirelessSetupInOOBE> | |
| <HideOnlineAccountScreens>false</HideOnlineAccountScreens> | |
| </OOBE> | |
| <FirstLogonCommands> | |
| <SynchronousCommand wcm:action="add"> | |
| <Order>1</Order> | |
| <CommandLine>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\FirstLogon.ps1' -Raw | Invoke-Expression;"</CommandLine> | |
| </SynchronousCommand> | |
| </FirstLogonCommands> | |
| </component> | |
| </settings> | |
| <Extensions xmlns="https://schneegans.de/windows/unattend-generator/"> | |
| <ExtractScript> | |
| param( | |
| [xml] $Document | |
| ); | |
| foreach( $file in $Document.unattend.Extensions.File ) { | |
| $path = [System.Environment]::ExpandEnvironmentVariables( $file.GetAttribute( 'path' ) ); | |
| mkdir -Path( $path | Split-Path -Parent ) -ErrorAction 'SilentlyContinue'; | |
| $encoding = switch( [System.IO.Path]::GetExtension( $path ) ) { | |
| { $_ -in '.ps1', '.xml' } { [System.Text.Encoding]::UTF8; } | |
| { $_ -in '.reg', '.vbs', '.js' } { [System.Text.UnicodeEncoding]::new( $false, $true ); } | |
| default { [System.Text.Encoding]::Default; } | |
| }; | |
| $bytes = $encoding.GetPreamble() + $encoding.GetBytes( $file.InnerText.Trim() ); | |
| [System.IO.File]::WriteAllBytes( $path, $bytes ); | |
| } | |
| </ExtractScript> | |
| <File path="C:\Windows\Setup\Scripts\RemovePackages.ps1"> | |
| $selectors = @( | |
| 'Microsoft.Microsoft3DViewer'; | |
| 'Microsoft.BingSearch'; | |
| 'Microsoft.WindowsCalculator'; | |
| 'Microsoft.WindowsCamera'; | |
| 'Clipchamp.Clipchamp'; | |
| 'Microsoft.WindowsAlarms'; | |
| 'Microsoft.Copilot'; | |
| 'Microsoft.549981C3F5F10'; | |
| 'Microsoft.Windows.DevHome'; | |
| 'MicrosoftCorporationII.MicrosoftFamily'; | |
| 'Microsoft.WindowsFeedbackHub'; | |
| 'Microsoft.Edge.GameAssist'; | |
| 'Microsoft.GetHelp'; | |
| 'Microsoft.Getstarted'; | |
| 'microsoft.windowscommunicationsapps'; | |
| 'Microsoft.WindowsMaps'; | |
| 'Microsoft.MixedReality.Portal'; | |
| 'Microsoft.BingNews'; | |
| 'Microsoft.WindowsNotepad'; | |
| 'Microsoft.MicrosoftOfficeHub'; | |
| 'Microsoft.Office.OneNote'; | |
| 'Microsoft.OutlookForWindows'; | |
| 'Microsoft.Paint'; | |
| 'Microsoft.MSPaint'; | |
| 'Microsoft.People'; | |
| 'Microsoft.Windows.Photos'; | |
| 'Microsoft.PowerAutomateDesktop'; | |
| 'MicrosoftCorporationII.QuickAssist'; | |
| 'Microsoft.SkypeApp'; | |
| 'Microsoft.ScreenSketch'; | |
| 'Microsoft.MicrosoftSolitaireCollection'; | |
| 'Microsoft.MicrosoftStickyNotes'; | |
| 'MicrosoftTeams'; | |
| 'MSTeams'; | |
| 'Microsoft.Todos'; | |
| 'Microsoft.WindowsSoundRecorder'; | |
| 'Microsoft.Wallet'; | |
| 'Microsoft.BingWeather'; | |
| 'Microsoft.WindowsTerminal'; | |
| 'Microsoft.Xbox.TCUI'; | |
| 'Microsoft.XboxApp'; | |
| 'Microsoft.XboxGameOverlay'; | |
| 'Microsoft.XboxGamingOverlay'; | |
| 'Microsoft.XboxIdentityProvider'; | |
| 'Microsoft.XboxSpeechToTextOverlay'; | |
| 'Microsoft.GamingApp'; | |
| 'Microsoft.YourPhone'; | |
| 'Microsoft.ZuneMusic'; | |
| 'Microsoft.ZuneVideo'; | |
| ); | |
| $getCommand = { | |
| Get-AppxProvisionedPackage -Online; | |
| }; | |
| $filterCommand = { | |
| $_.DisplayName -eq $selector; | |
| }; | |
| $removeCommand = { | |
| [CmdletBinding()] | |
| param( | |
| [Parameter( Mandatory, ValueFromPipeline )] | |
| $InputObject | |
| ); | |
| process { | |
| $InputObject | Remove-AppxProvisionedPackage -AllUsers -Online -ErrorAction 'Continue'; | |
| } | |
| }; | |
| $type = 'Package'; | |
| $logfile = 'C:\Windows\Setup\Scripts\RemovePackages.log'; | |
| & { | |
| $installed = & $getCommand; | |
| foreach( $selector in $selectors ) { | |
| $result = [ordered] @{ | |
| Selector = $selector; | |
| }; | |
| $found = $installed | Where-Object -FilterScript $filterCommand; | |
| if( $found ) { | |
| $result.Output = $found | & $removeCommand; | |
| if( $? ) { | |
| $result.Message = "$type removed."; | |
| } else { | |
| $result.Message = "$type not removed."; | |
| $result.Error = $Error[0]; | |
| } | |
| } else { | |
| $result.Message = "$type not installed."; | |
| } | |
| $result | ConvertTo-Json -Depth 3 -Compress; | |
| } | |
| } *>&1 >> $logfile; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\RemoveCapabilities.ps1"> | |
| $selectors = @( | |
| 'Print.Fax.Scan'; | |
| 'Language.Handwriting'; | |
| 'Browser.InternetExplorer'; | |
| 'MathRecognizer'; | |
| 'OneCoreUAP.OneSync'; | |
| 'OpenSSH.Client'; | |
| 'Microsoft.Windows.MSPaint'; | |
| 'Microsoft.Windows.PowerShell.ISE'; | |
| 'App.Support.QuickAssist'; | |
| 'Microsoft.Windows.SnippingTool'; | |
| 'Language.Speech'; | |
| 'Language.TextToSpeech'; | |
| 'App.StepsRecorder'; | |
| 'Hello.Face.18967'; | |
| 'Hello.Face.Migration.18967'; | |
| 'Hello.Face.20134'; | |
| 'Media.WindowsMediaPlayer'; | |
| 'Microsoft.Windows.WordPad'; | |
| ); | |
| $getCommand = { | |
| Get-WindowsCapability -Online | Where-Object -Property 'State' -NotIn -Value @( | |
| 'NotPresent'; | |
| 'Removed'; | |
| ); | |
| }; | |
| $filterCommand = { | |
| ($_.Name -split '~')[0] -eq $selector; | |
| }; | |
| $removeCommand = { | |
| [CmdletBinding()] | |
| param( | |
| [Parameter( Mandatory, ValueFromPipeline )] | |
| $InputObject | |
| ); | |
| process { | |
| $InputObject | Remove-WindowsCapability -Online -ErrorAction 'Continue'; | |
| } | |
| }; | |
| $type = 'Capability'; | |
| $logfile = 'C:\Windows\Setup\Scripts\RemoveCapabilities.log'; | |
| & { | |
| $installed = & $getCommand; | |
| foreach( $selector in $selectors ) { | |
| $result = [ordered] @{ | |
| Selector = $selector; | |
| }; | |
| $found = $installed | Where-Object -FilterScript $filterCommand; | |
| if( $found ) { | |
| $result.Output = $found | & $removeCommand; | |
| if( $? ) { | |
| $result.Message = "$type removed."; | |
| } else { | |
| $result.Message = "$type not removed."; | |
| $result.Error = $Error[0]; | |
| } | |
| } else { | |
| $result.Message = "$type not installed."; | |
| } | |
| $result | ConvertTo-Json -Depth 3 -Compress; | |
| } | |
| } *>&1 >> $logfile; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\RemoveFeatures.ps1"> | |
| $selectors = @( | |
| 'MediaPlayback'; | |
| 'MicrosoftWindowsPowerShellV2Root'; | |
| 'Microsoft-RemoteDesktopConnection'; | |
| 'Recall'; | |
| 'Microsoft-SnippingTool'; | |
| ); | |
| $getCommand = { | |
| Get-WindowsOptionalFeature -Online | Where-Object -Property 'State' -NotIn -Value @( | |
| 'Disabled'; | |
| 'DisabledWithPayloadRemoved'; | |
| ); | |
| }; | |
| $filterCommand = { | |
| $_.FeatureName -eq $selector; | |
| }; | |
| $removeCommand = { | |
| [CmdletBinding()] | |
| param( | |
| [Parameter( Mandatory, ValueFromPipeline )] | |
| $InputObject | |
| ); | |
| process { | |
| $InputObject | Disable-WindowsOptionalFeature -Online -Remove -NoRestart -ErrorAction 'Continue'; | |
| } | |
| }; | |
| $type = 'Feature'; | |
| $logfile = 'C:\Windows\Setup\Scripts\RemoveFeatures.log'; | |
| & { | |
| $installed = & $getCommand; | |
| foreach( $selector in $selectors ) { | |
| $result = [ordered] @{ | |
| Selector = $selector; | |
| }; | |
| $found = $installed | Where-Object -FilterScript $filterCommand; | |
| if( $found ) { | |
| $result.Output = $found | & $removeCommand; | |
| if( $? ) { | |
| $result.Message = "$type removed."; | |
| } else { | |
| $result.Message = "$type not removed."; | |
| $result.Error = $Error[0]; | |
| } | |
| } else { | |
| $result.Message = "$type not installed."; | |
| } | |
| $result | ConvertTo-Json -Depth 3 -Compress; | |
| } | |
| } *>&1 >> $logfile; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\Specialize.ps1"> | |
| $scripts = @( | |
| { | |
| reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f; | |
| }; | |
| { | |
| reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f; | |
| }; | |
| { | |
| Remove-Item -LiteralPath 'Registry::HKLM\Software\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate' -Force -ErrorAction 'SilentlyContinue'; | |
| }; | |
| { | |
| reg.exe add "HKCR\.txt\ShellNew" /v ItemName /t REG_EXPAND_SZ /d "@C:\Windows\system32\notepad.exe,-470" /f; | |
| reg.exe add "HKCR\.txt\ShellNew" /v NullFile /t REG_SZ /f; | |
| reg.exe add "HKCR\txtfilelegacy" /v FriendlyTypeName /t REG_EXPAND_SZ /d "@C:\Windows\system32\notepad.exe,-469" /f; | |
| reg.exe add "HKCR\txtfilelegacy" /ve /t REG_SZ /d "Text Document" /f; | |
| }; | |
| { | |
| Remove-Item -LiteralPath 'C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk', 'C:\Windows\System32\OneDriveSetup.exe', 'C:\Windows\SysWOW64\OneDriveSetup.exe' -ErrorAction 'Continue'; | |
| }; | |
| { | |
| Remove-Item -LiteralPath 'Registry::HKLM\Software\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate' -Force -ErrorAction 'SilentlyContinue'; | |
| }; | |
| { | |
| reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v ConfigureChatAutoInstall /t REG_DWORD /d 0 /f; | |
| }; | |
| { | |
| Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemovePackages.ps1' -Raw | Invoke-Expression; | |
| }; | |
| { | |
| Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemoveCapabilities.ps1' -Raw | Invoke-Expression; | |
| }; | |
| { | |
| Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\RemoveFeatures.ps1' -Raw | Invoke-Expression; | |
| }; | |
| ); | |
| & { | |
| [float] $complete = 0; | |
| [float] $increment = 100 / $scripts.Count; | |
| foreach( $script in $scripts ) { | |
| Write-Progress -Activity 'Running scripts to customize your Windows installation. Do not close this window.' -PercentComplete $complete; | |
| '*** Will now execute command «{0}».' -f $( | |
| $str = $script.ToString().Trim() -replace '\s+', ' '; | |
| $max = 100; | |
| if( $str.Length -le $max ) { | |
| $str; | |
| } else { | |
| $str.Substring( 0, $max - 1 ) + '…'; | |
| } | |
| ); | |
| $start = [datetime]::Now; | |
| & $script; | |
| '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; | |
| "`r`n" * 3; | |
| $complete += $increment; | |
| } | |
| } *>&1 >> "C:\Windows\Setup\Scripts\Specialize.log"; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\UserOnce.ps1"> | |
| $scripts = @( | |
| { | |
| Get-AppxPackage -Name 'Microsoft.Windows.Ai.Copilot.Provider' | Remove-AppxPackage; | |
| }; | |
| ); | |
| & { | |
| [float] $complete = 0; | |
| [float] $increment = 100 / $scripts.Count; | |
| foreach( $script in $scripts ) { | |
| Write-Progress -Activity 'Running scripts to configure this user account. Do not close this window.' -PercentComplete $complete; | |
| '*** Will now execute command «{0}».' -f $( | |
| $str = $script.ToString().Trim() -replace '\s+', ' '; | |
| $max = 100; | |
| if( $str.Length -le $max ) { | |
| $str; | |
| } else { | |
| $str.Substring( 0, $max - 1 ) + '…'; | |
| } | |
| ); | |
| $start = [datetime]::Now; | |
| & $script; | |
| '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; | |
| "`r`n" * 3; | |
| $complete += $increment; | |
| } | |
| } *>&1 >> "$env:TEMP\UserOnce.log"; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\DefaultUser.ps1"> | |
| $scripts = @( | |
| { | |
| reg.exe add "HKU\DefaultUser\Software\Policies\Microsoft\Windows\WindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f; | |
| }; | |
| { | |
| reg.exe add "HKU\DefaultUser\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore" /f; | |
| }; | |
| { | |
| reg.exe add "HKU\DefaultUser\Software\Microsoft\Notepad" /v ShowStoreBanner /t REG_DWORD /d 0 /f; | |
| }; | |
| { | |
| Remove-ItemProperty -LiteralPath 'Registry::HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Run' -Name 'OneDriveSetup' -Force -ErrorAction 'Continue'; | |
| }; | |
| { | |
| reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\GameDVR" /v AppCaptureEnabled /t REG_DWORD /d 0 /f; | |
| }; | |
| { | |
| reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v "UnattendedSetup" /t REG_SZ /d "powershell.exe -WindowStyle Normal -NoProfile -Command \""Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\UserOnce.ps1' -Raw | Invoke-Expression;\""" /f; | |
| }; | |
| ); | |
| & { | |
| [float] $complete = 0; | |
| [float] $increment = 100 / $scripts.Count; | |
| foreach( $script in $scripts ) { | |
| Write-Progress -Activity 'Running scripts to modify the default user’’s registry hive. Do not close this window.' -PercentComplete $complete; | |
| '*** Will now execute command «{0}».' -f $( | |
| $str = $script.ToString().Trim() -replace '\s+', ' '; | |
| $max = 100; | |
| if( $str.Length -le $max ) { | |
| $str; | |
| } else { | |
| $str.Substring( 0, $max - 1 ) + '…'; | |
| } | |
| ); | |
| $start = [datetime]::Now; | |
| & $script; | |
| '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; | |
| "`r`n" * 3; | |
| $complete += $increment; | |
| } | |
| } *>&1 >> "C:\Windows\Setup\Scripts\DefaultUser.log"; | |
| </File> | |
| <File path="C:\Windows\Setup\Scripts\FirstLogon.ps1"> | |
| $scripts = @( | |
| { | |
| Set-ItemProperty -LiteralPath 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name 'AutoLogonCount' -Type 'DWord' -Force -Value 0; | |
| }; | |
| { | |
| Remove-Item -LiteralPath @( | |
| 'C:\Windows\Panther\unattend.xml'; | |
| 'C:\Windows\Panther\unattend-original.xml'; | |
| 'C:\Windows\Setup\Scripts\Wifi.xml'; | |
| ) -Force -ErrorAction 'SilentlyContinue' -Verbose; | |
| }; | |
| ); | |
| & { | |
| [float] $complete = 0; | |
| [float] $increment = 100 / $scripts.Count; | |
| foreach( $script in $scripts ) { | |
| Write-Progress -Activity 'Running scripts to finalize your Windows installation. Do not close this window.' -PercentComplete $complete; | |
| '*** Will now execute command «{0}».' -f $( | |
| $str = $script.ToString().Trim() -replace '\s+', ' '; | |
| $max = 100; | |
| if( $str.Length -le $max ) { | |
| $str; | |
| } else { | |
| $str.Substring( 0, $max - 1 ) + '…'; | |
| } | |
| ); | |
| $start = [datetime]::Now; | |
| & $script; | |
| '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds; | |
| "`r`n" * 3; | |
| $complete += $increment; | |
| } | |
| } *>&1 >> "C:\Windows\Setup\Scripts\FirstLogon.log"; | |
| </File> | |
| </Extensions> | |
| </unattend> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment