mirror of
https://github.com/ntdevlabs/tiny11builder.git
synced 2025-12-19 18:04:11 +00:00
Refactor removal selection & code reading improved.
- Refactor package dynamic removal selection. - Implemented dynamic registry changes to disable `DevHome`, `Outlook`, `Copilot` and `Teams` if user select them during removal selection. - Improved code separation for better reading experience.
This commit is contained in:
parent
bbbf0a534d
commit
4e79da5231
1 changed files with 83 additions and 32 deletions
|
|
@ -150,12 +150,14 @@ Remove-Item "$ScratchDisk\tiny11\sources\install.esd" > $null 2>&1
|
||||||
Write-Output "Copy complete!"
|
Write-Output "Copy complete!"
|
||||||
Start-Sleep -Seconds 2
|
Start-Sleep -Seconds 2
|
||||||
Clear-Host
|
Clear-Host
|
||||||
|
|
||||||
Write-Output "Getting image information:"
|
Write-Output "Getting image information:"
|
||||||
$ImagesIndex = (Get-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\install.wim).ImageIndex
|
$ImagesIndex = (Get-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\install.wim).ImageIndex
|
||||||
while ($ImagesIndex -notcontains $index) {
|
while ($ImagesIndex -notcontains $index) {
|
||||||
Get-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\install.wim
|
Get-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\install.wim
|
||||||
$index = Read-Host "Please enter the image index"
|
$index = Read-Host "Please enter the image index"
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Output "Mounting Windows image. This may take a while."
|
Write-Output "Mounting Windows image. This may take a while."
|
||||||
$wimFilePath = "$ScratchDisk\tiny11\sources\install.wim"
|
$wimFilePath = "$ScratchDisk\tiny11\sources\install.wim"
|
||||||
& takeown "/F" $wimFilePath
|
& takeown "/F" $wimFilePath
|
||||||
|
|
@ -171,7 +173,6 @@ Mount-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\install.wim -Index $in
|
||||||
|
|
||||||
$imageIntl = & dism /English /Get-Intl "/Image:$($ScratchDisk)\scratchdir"
|
$imageIntl = & dism /English /Get-Intl "/Image:$($ScratchDisk)\scratchdir"
|
||||||
$languageLine = $imageIntl -split '\n' | Where-Object { $_ -match 'Default system UI language : ([a-zA-Z]{2}-[a-zA-Z]{2})' }
|
$languageLine = $imageIntl -split '\n' | Where-Object { $_ -match 'Default system UI language : ([a-zA-Z]{2}-[a-zA-Z]{2})' }
|
||||||
|
|
||||||
if ($languageLine) {
|
if ($languageLine) {
|
||||||
$languageCode = $Matches[1]
|
$languageCode = $Matches[1]
|
||||||
Write-Output "Default system UI language code: $languageCode"
|
Write-Output "Default system UI language code: $languageCode"
|
||||||
|
|
@ -181,7 +182,6 @@ if ($languageLine) {
|
||||||
|
|
||||||
$imageInfo = & 'dism' '/English' '/Get-WimInfo' "/wimFile:$($ScratchDisk)\tiny11\sources\install.wim" "/index:$index"
|
$imageInfo = & 'dism' '/English' '/Get-WimInfo' "/wimFile:$($ScratchDisk)\tiny11\sources\install.wim" "/index:$index"
|
||||||
$lines = $imageInfo -split '\r?\n'
|
$lines = $imageInfo -split '\r?\n'
|
||||||
|
|
||||||
foreach ($line in $lines) {
|
foreach ($line in $lines) {
|
||||||
if ($line -like '*Architecture : *') {
|
if ($line -like '*Architecture : *') {
|
||||||
$architecture = $line -replace 'Architecture : ',''
|
$architecture = $line -replace 'Architecture : ',''
|
||||||
|
|
@ -193,13 +193,11 @@ foreach ($line in $lines) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not $architecture) {
|
if (-not $architecture) {
|
||||||
Write-Output "Architecture information not found."
|
Write-Output "Architecture information not found."
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Output "Mounting complete! Performing removal of applications..."
|
Write-Output "Mounting complete! Performing removal of applications..."
|
||||||
|
|
||||||
$packages = & 'dism' '/English' "/image:$($ScratchDisk)\scratchdir" '/Get-ProvisionedAppxPackages' |
|
$packages = & 'dism' '/English' "/image:$($ScratchDisk)\scratchdir" '/Get-ProvisionedAppxPackages' |
|
||||||
ForEach-Object {
|
ForEach-Object {
|
||||||
if ($_ -match 'PackageName : (.*)') {
|
if ($_ -match 'PackageName : (.*)') {
|
||||||
|
|
@ -261,36 +259,38 @@ $packagePrefixes = 'AppUp.IntelManagementandSecurityStatus',
|
||||||
'Microsoft.WindowsTerminal',
|
'Microsoft.WindowsTerminal',
|
||||||
'Microsoft.549981C3F5F10'
|
'Microsoft.549981C3F5F10'
|
||||||
|
|
||||||
$packagesToRemove = $packages | Where-Object {
|
|
||||||
$packageName = $_
|
|
||||||
$packagePrefixes -contains ($packagePrefixes | Where-Object { $packageName -like "*$_*" })
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($Custom) {
|
if ($Custom) {
|
||||||
$Confirmation = ""
|
$Confirmation = ""
|
||||||
$selectedPrefixes = @()
|
$selectedPrefixes = @()
|
||||||
|
|
||||||
while ($Confirmation -ne 'Yes') {
|
while ($Confirmation -ne 'Yes') {
|
||||||
Write-Output "List of applications to remove:"
|
Write-Output "List of applications to remove:"
|
||||||
for ($i=0; $i -lt $packagePrefixes.Count; $i++) {
|
for ($i=0; $i -lt $packages.Count; $i++) {
|
||||||
Write-Output "$($i+1). $($packagePrefixes[$i])"
|
Write-Output "$($i+1). $($packages[$i])"
|
||||||
}
|
}
|
||||||
$userInput = Read-Host "Selected numbers (eg: 1,3,5)"
|
$userInput = Read-Host "Selected numbers (eg: 1,3,5)"
|
||||||
$selectedPrefixes = $userInput -split "," | ForEach-Object {
|
$selectedPrefixes = $userInput -split "," | ForEach-Object {
|
||||||
$select_index = $_.Trim()
|
$select_index = $_.Trim()
|
||||||
if ($select_index -match '^\d+$' -and $select_index -ge 1 -and $select_index -le $packagePrefixes.Count) {
|
if ($select_index -match '^\d+$' -and $select_index -ge 1 -and $select_index -le $packages.Count) {
|
||||||
$packagePrefixes[$select_index-1]
|
$packages[$select_index-1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Output "Chosen package prefixes: $selectedPrefixes"
|
Write-Output "Chosen package prefixes: $selectedPrefixes"
|
||||||
$Confirmation = Read-Host "Type 'Yes' to confirm your selection and proceed with the removal, or press Enter to reselect"
|
$Confirmation = Read-Host "Type 'Yes' to confirm your selection and proceed with the removal, or press Enter to reselect"
|
||||||
}
|
}
|
||||||
|
|
||||||
$packagesToRemove = @()
|
$packagesToRemove = @()
|
||||||
foreach ($prefix in $selectedPrefixes) {
|
foreach ($prefix in $selectedPrefixes) {
|
||||||
$matched = $packages | Where-Object { $_ -like "$prefix*" }
|
$matches = $packages | Where-Object { $_ -like "$prefix*" }
|
||||||
$packagesToRemove += $matched
|
$packagesToRemove += $matches
|
||||||
|
}
|
||||||
|
$packagesToRemove = $packagesToRemove | Sort-Object -Unique
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$packagesToRemove = @()
|
||||||
|
foreach ($prefix in $packagePrefixes) {
|
||||||
|
$matches = $packages | Where-Object { $_ -like "$prefix*" }
|
||||||
|
$packagesToRemove += $matches
|
||||||
}
|
}
|
||||||
$packagesToRemove = $packagesToRemove | Sort-Object -Unique
|
$packagesToRemove = $packagesToRemove | Sort-Object -Unique
|
||||||
}
|
}
|
||||||
|
|
@ -307,19 +307,23 @@ Remove-Item -Path "$ScratchDisk\scratchdir\Program Files (x86)\Microsoft\EdgeCor
|
||||||
& 'takeown' '/f' "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" '/r' | Out-Null
|
& 'takeown' '/f' "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" '/r' | Out-Null
|
||||||
& 'icacls' "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" '/grant' "$($adminGroup.Value):(F)" '/T' '/C' | Out-Null
|
& 'icacls' "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" '/grant' "$($adminGroup.Value):(F)" '/T' '/C' | Out-Null
|
||||||
Remove-Item -Path "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" -Recurse -Force | Out-Null
|
Remove-Item -Path "$ScratchDisk\scratchdir\Windows\System32\Microsoft-Edge-Webview" -Recurse -Force | Out-Null
|
||||||
|
|
||||||
Write-Output "Removing OneDrive:"
|
Write-Output "Removing OneDrive:"
|
||||||
& 'takeown' '/f' "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" | Out-Null
|
& 'takeown' '/f' "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" | Out-Null
|
||||||
& 'icacls' "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" '/grant' "$($adminGroup.Value):(F)" '/T' '/C' | Out-Null
|
& 'icacls' "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" '/grant' "$($adminGroup.Value):(F)" '/T' '/C' | Out-Null
|
||||||
Remove-Item -Path "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" -Force | Out-Null
|
Remove-Item -Path "$ScratchDisk\scratchdir\Windows\System32\OneDriveSetup.exe" -Force | Out-Null
|
||||||
Write-Output "Removal complete!"
|
Write-Output "Removal complete!"
|
||||||
|
|
||||||
Start-Sleep -Seconds 2
|
Start-Sleep -Seconds 2
|
||||||
Clear-Host
|
Clear-Host
|
||||||
|
|
||||||
Write-Output "Loading registry..."
|
Write-Output "Loading registry..."
|
||||||
reg load HKLM\zCOMPONENTS $ScratchDisk\scratchdir\Windows\System32\config\COMPONENTS | Out-Null
|
reg load HKLM\zCOMPONENTS $ScratchDisk\scratchdir\Windows\System32\config\COMPONENTS | Out-Null
|
||||||
reg load HKLM\zDEFAULT $ScratchDisk\scratchdir\Windows\System32\config\default | Out-Null
|
reg load HKLM\zDEFAULT $ScratchDisk\scratchdir\Windows\System32\config\default | Out-Null
|
||||||
reg load HKLM\zNTUSER $ScratchDisk\scratchdir\Users\Default\ntuser.dat | Out-Null
|
reg load HKLM\zNTUSER $ScratchDisk\scratchdir\Users\Default\ntuser.dat | Out-Null
|
||||||
reg load HKLM\zSOFTWARE $ScratchDisk\scratchdir\Windows\System32\config\SOFTWARE | Out-Null
|
reg load HKLM\zSOFTWARE $ScratchDisk\scratchdir\Windows\System32\config\SOFTWARE | Out-Null
|
||||||
reg load HKLM\zSYSTEM $ScratchDisk\scratchdir\Windows\System32\config\SYSTEM | Out-Null
|
reg load HKLM\zSYSTEM $ScratchDisk\scratchdir\Windows\System32\config\SYSTEM | Out-Null
|
||||||
|
|
||||||
Write-Output "Bypassing system requirements(on the system image):"
|
Write-Output "Bypassing system requirements(on the system image):"
|
||||||
Set-RegistryValue 'HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache' 'SV1' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache' 'SV1' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache' 'SV2' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache' 'SV2' 'REG_DWORD' '0'
|
||||||
|
|
@ -331,6 +335,7 @@ Set-RegistryValue 'HKLM\zSYSTEM\Setup\LabConfig' 'BypassSecureBootCheck' 'REG_DW
|
||||||
Set-RegistryValue 'HKLM\zSYSTEM\Setup\LabConfig' 'BypassStorageCheck' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSYSTEM\Setup\LabConfig' 'BypassStorageCheck' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSYSTEM\Setup\LabConfig' 'BypassTPMCheck' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSYSTEM\Setup\LabConfig' 'BypassTPMCheck' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSYSTEM\Setup\MoSetup' 'AllowUpgradesWithUnsupportedTPMOrCPU' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSYSTEM\Setup\MoSetup' 'AllowUpgradesWithUnsupportedTPMOrCPU' 'REG_DWORD' '1'
|
||||||
|
|
||||||
Write-Output "Disabling Sponsored Apps:"
|
Write-Output "Disabling Sponsored Apps:"
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' 'OemPreInstalledAppsEnabled' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' 'OemPreInstalledAppsEnabled' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' 'PreInstalledAppsEnabled' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' 'PreInstalledAppsEnabled' 'REG_DWORD' '0'
|
||||||
|
|
@ -355,22 +360,28 @@ Remove-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\Con
|
||||||
Remove-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SuggestedApps'
|
Remove-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\SuggestedApps'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableConsumerAccountStateContent' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableConsumerAccountStateContent' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableCloudOptimizedContent' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableCloudOptimizedContent' 'REG_DWORD' '1'
|
||||||
|
|
||||||
Write-Output "Enabling Local Accounts on OOBE:"
|
Write-Output "Enabling Local Accounts on OOBE:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE' 'BypassNRO' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE' 'BypassNRO' 'REG_DWORD' '1'
|
||||||
Copy-Item -Path "$PSScriptRoot\autounattend.xml" -Destination "$ScratchDisk\scratchdir\Windows\System32\Sysprep\autounattend.xml" -Force | Out-Null
|
Copy-Item -Path "$PSScriptRoot\autounattend.xml" -Destination "$ScratchDisk\scratchdir\Windows\System32\Sysprep\autounattend.xml" -Force | Out-Null
|
||||||
|
|
||||||
Write-Output "Disabling Reserved Storage:"
|
Write-Output "Disabling Reserved Storage:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager' 'ShippedWithReserves' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager' 'ShippedWithReserves' 'REG_DWORD' '0'
|
||||||
|
|
||||||
Write-Output "Disabling BitLocker Device Encryption"
|
Write-Output "Disabling BitLocker Device Encryption"
|
||||||
Set-RegistryValue 'HKLM\zSYSTEM\ControlSet001\Control\BitLocker' 'PreventDeviceEncryption' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSYSTEM\ControlSet001\Control\BitLocker' 'PreventDeviceEncryption' 'REG_DWORD' '1'
|
||||||
|
|
||||||
Write-Output "Disabling Chat icon:"
|
Write-Output "Disabling Chat icon:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat' 'ChatIcon' 'REG_DWORD' '3'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat' 'ChatIcon' 'REG_DWORD' '3'
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'TaskbarMn' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'TaskbarMn' 'REG_DWORD' '0'
|
||||||
|
|
||||||
Write-Output "Removing Edge related registries"
|
Write-Output "Removing Edge related registries"
|
||||||
Remove-RegistryValue "HKEY_LOCAL_MACHINE\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
|
Remove-RegistryValue "HKEY_LOCAL_MACHINE\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge"
|
||||||
Remove-RegistryValue "HKEY_LOCAL_MACHINE\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update"
|
Remove-RegistryValue "HKEY_LOCAL_MACHINE\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update"
|
||||||
|
|
||||||
Write-Output "Disabling OneDrive folder backup"
|
Write-Output "Disabling OneDrive folder backup"
|
||||||
Set-RegistryValue "HKLM\zSOFTWARE\Policies\Microsoft\Windows\OneDrive" "DisableFileSyncNGSC" "REG_DWORD" "1"
|
Set-RegistryValue "HKLM\zSOFTWARE\Policies\Microsoft\Windows\OneDrive" "DisableFileSyncNGSC" "REG_DWORD" "1"
|
||||||
|
|
||||||
Write-Output "Disabling Telemetry:"
|
Write-Output "Disabling Telemetry:"
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo' 'Enabled' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo' 'Enabled' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\Privacy' 'TailoredExperiencesWithDiagnosticDataEnabled' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Windows\CurrentVersion\Privacy' 'TailoredExperiencesWithDiagnosticDataEnabled' 'REG_DWORD' '0'
|
||||||
|
|
@ -382,22 +393,50 @@ Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\InputPersonalization\TrainedD
|
||||||
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Personalization\Settings' 'AcceptedPrivacyPolicy' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zNTUSER\Software\Microsoft\Personalization\Settings' 'AcceptedPrivacyPolicy' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\DataCollection' 'AllowTelemetry' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\DataCollection' 'AllowTelemetry' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zSYSTEM\ControlSet001\Services\dmwappushservice' 'Start' 'REG_DWORD' '4'
|
Set-RegistryValue 'HKLM\zSYSTEM\ControlSet001\Services\dmwappushservice' 'Start' 'REG_DWORD' '4'
|
||||||
## Prevents installation of DevHome and Outlook
|
|
||||||
|
if (-not $PSBoundParameters.ContainsKey('Custom') -or -not $Custom) {
|
||||||
Write-Output "Prevents installation of DevHome and Outlook:"
|
Write-Output "Prevents installation of DevHome and Outlook:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\DevHomeUpdate' 'workCompleted' 'REG_DWORD' '1'
|
|
||||||
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate'
|
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate'
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\DevHomeUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate'
|
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate'
|
||||||
|
|
||||||
Write-Output "Disabling Copilot"
|
Write-Output "Disabling Copilot"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\WindowsCopilot' 'TurnOffWindowsCopilot' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\WindowsCopilot' 'TurnOffWindowsCopilot' 'REG_DWORD' '1'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Edge' 'HubsSidebarEnabled' 'REG_DWORD' '0'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Edge' 'HubsSidebarEnabled' 'REG_DWORD' '0'
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Explorer' 'DisableSearchBoxSuggestions' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Explorer' 'DisableSearchBoxSuggestions' 'REG_DWORD' '1'
|
||||||
|
|
||||||
Write-Output "Prevents installation of Teams:"
|
Write-Output "Prevents installation of Teams:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Teams' 'DisableInstallation' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Teams' 'DisableInstallation' 'REG_DWORD' '1'
|
||||||
Write-Output "Prevent installation of New Outlook":
|
|
||||||
|
Write-Output "Prevent installation of New Outlook:"
|
||||||
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Mail' 'PreventRun' 'REG_DWORD' '1'
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Mail' 'PreventRun' 'REG_DWORD' '1'
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if ($packagesToRemove -contains 'Microsoft.Windows.DevHome') {
|
||||||
|
Write-Output "Prevents installation of DevHome:"
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
|
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate'
|
||||||
|
}
|
||||||
|
if ($packagesToRemove -contains 'Microsoft.OutlookForWindows') {
|
||||||
|
Write-Output "Prevent installation of New Outlook:"
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler\OutlookUpdate' 'workCompleted' 'REG_DWORD' '1'
|
||||||
|
Remove-RegistryValue 'HKLM\zSOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate'
|
||||||
|
}
|
||||||
|
if ($packagesToRemove -contains 'Microsoft.Windows.Copilot') {
|
||||||
|
Write-Output "Disabling Copilot"
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\WindowsCopilot' 'TurnOffWindowsCopilot' 'REG_DWORD' '1'
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Edge' 'HubsSidebarEnabled' 'REG_DWORD' '0'
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Windows\Explorer' 'DisableSearchBoxSuggestions' 'REG_DWORD' '1'
|
||||||
|
}
|
||||||
|
if ($packagesToRemove -contains 'Microsoft.Windows.Teams') {
|
||||||
|
Write-Output "Prevents installation of Teams:"
|
||||||
|
Set-RegistryValue 'HKLM\zSOFTWARE\Policies\Microsoft\Teams' 'DisableInstallation' 'REG_DWORD' '1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Deleting scheduled task definition files..."
|
Write-Host "Deleting scheduled task definition files..."
|
||||||
$tasksPath = "$ScratchDisk\scratchdir\Windows\System32\Tasks"
|
$tasksPath = "$ScratchDisk\scratchdir\Windows\System32\Tasks"
|
||||||
|
|
||||||
|
|
@ -416,31 +455,38 @@ Remove-Item -Path "$tasksPath\Microsoft\Windows\Chkdsk\Proxy" -Force -ErrorActio
|
||||||
# Windows Error Reporting (QueueReporting)
|
# Windows Error Reporting (QueueReporting)
|
||||||
Remove-Item -Path "$tasksPath\Microsoft\Windows\Windows Error Reporting\QueueReporting" -Force -ErrorAction SilentlyContinue
|
Remove-Item -Path "$tasksPath\Microsoft\Windows\Windows Error Reporting\QueueReporting" -Force -ErrorAction SilentlyContinue
|
||||||
Write-Host "Task files have been deleted."
|
Write-Host "Task files have been deleted."
|
||||||
|
|
||||||
Write-Host "Unmounting Registry..."
|
Write-Host "Unmounting Registry..."
|
||||||
reg unload HKLM\zCOMPONENTS | Out-Null
|
reg unload HKLM\zCOMPONENTS | Out-Null
|
||||||
reg unload HKLM\zDEFAULT | Out-Null
|
reg unload HKLM\zDEFAULT | Out-Null
|
||||||
reg unload HKLM\zNTUSER | Out-Null
|
reg unload HKLM\zNTUSER | Out-Null
|
||||||
reg unload HKLM\zSOFTWARE | Out-Null
|
reg unload HKLM\zSOFTWARE | Out-Null
|
||||||
reg unload HKLM\zSYSTEM | Out-Null
|
reg unload HKLM\zSYSTEM | Out-Null
|
||||||
|
|
||||||
Write-Output "Cleaning up image..."
|
Write-Output "Cleaning up image..."
|
||||||
dism.exe /Image:$ScratchDisk\scratchdir /Cleanup-Image /StartComponentCleanup /ResetBase
|
dism.exe /Image:$ScratchDisk\scratchdir /Cleanup-Image /StartComponentCleanup /ResetBase
|
||||||
Write-Output "Cleanup complete."
|
Write-Output "Cleanup complete."
|
||||||
Write-Output ' '
|
Write-Output ' '
|
||||||
|
|
||||||
Write-Output "Unmounting image..."
|
Write-Output "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path $ScratchDisk\scratchdir -Save
|
Dismount-WindowsImage -Path $ScratchDisk\scratchdir -Save
|
||||||
|
|
||||||
Write-Host "Exporting image..."
|
Write-Host "Exporting image..."
|
||||||
Dism.exe /Export-Image /SourceImageFile:"$ScratchDisk\tiny11\sources\install.wim" /SourceIndex:$index /DestinationImageFile:"$ScratchDisk\tiny11\sources\install2.wim" /Compress:recovery
|
Dism.exe /Export-Image /SourceImageFile:"$ScratchDisk\tiny11\sources\install.wim" /SourceIndex:$index /DestinationImageFile:"$ScratchDisk\tiny11\sources\install2.wim" /Compress:recovery
|
||||||
Remove-Item -Path "$ScratchDisk\tiny11\sources\install.wim" -Force | Out-Null
|
Remove-Item -Path "$ScratchDisk\tiny11\sources\install.wim" -Force | Out-Null
|
||||||
Rename-Item -Path "$ScratchDisk\tiny11\sources\install2.wim" -NewName "install.wim" | Out-Null
|
Rename-Item -Path "$ScratchDisk\tiny11\sources\install2.wim" -NewName "install.wim" | Out-Null
|
||||||
|
|
||||||
Write-Output "Windows image completed. Continuing with boot.wim."
|
Write-Output "Windows image completed. Continuing with boot.wim."
|
||||||
Start-Sleep -Seconds 2
|
Start-Sleep -Seconds 2
|
||||||
Clear-Host
|
Clear-Host
|
||||||
|
|
||||||
Write-Output "Mounting boot image:"
|
Write-Output "Mounting boot image:"
|
||||||
$wimFilePath = "$ScratchDisk\tiny11\sources\boot.wim"
|
$wimFilePath = "$ScratchDisk\tiny11\sources\boot.wim"
|
||||||
& takeown "/F" $wimFilePath | Out-Null
|
& takeown "/F" $wimFilePath | Out-Null
|
||||||
& icacls $wimFilePath "/grant" "$($adminGroup.Value):(F)"
|
& icacls $wimFilePath "/grant" "$($adminGroup.Value):(F)"
|
||||||
Set-ItemProperty -Path $wimFilePath -Name IsReadOnly -Value $false
|
Set-ItemProperty -Path $wimFilePath -Name IsReadOnly -Value $false
|
||||||
Mount-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\boot.wim -Index 2 -Path $ScratchDisk\scratchdir
|
Mount-WindowsImage -ImagePath $ScratchDisk\tiny11\sources\boot.wim -Index 2 -Path $ScratchDisk\scratchdir
|
||||||
|
|
||||||
Write-Output "Loading registry..."
|
Write-Output "Loading registry..."
|
||||||
reg load HKLM\zCOMPONENTS $ScratchDisk\scratchdir\Windows\System32\config\COMPONENTS
|
reg load HKLM\zCOMPONENTS $ScratchDisk\scratchdir\Windows\System32\config\COMPONENTS
|
||||||
reg load HKLM\zDEFAULT $ScratchDisk\scratchdir\Windows\System32\config\default
|
reg load HKLM\zDEFAULT $ScratchDisk\scratchdir\Windows\System32\config\default
|
||||||
|
|
@ -471,13 +517,14 @@ reg unload HKLM\zSYSTEM | Out-Null
|
||||||
Write-Output "Unmounting image..."
|
Write-Output "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path $ScratchDisk\scratchdir -Save
|
Dismount-WindowsImage -Path $ScratchDisk\scratchdir -Save
|
||||||
Clear-Host
|
Clear-Host
|
||||||
|
|
||||||
Write-Output "The tiny11 image is now completed. Proceeding with the making of the ISO..."
|
Write-Output "The tiny11 image is now completed. Proceeding with the making of the ISO..."
|
||||||
Write-Output "Copying unattended file for bypassing MS account on OOBE..."
|
Write-Output "Copying unattended file for bypassing MS account on OOBE..."
|
||||||
Copy-Item -Path "$PSScriptRoot\autounattend.xml" -Destination "$ScratchDisk\tiny11\autounattend.xml" -Force | Out-Null
|
Copy-Item -Path "$PSScriptRoot\autounattend.xml" -Destination "$ScratchDisk\tiny11\autounattend.xml" -Force | Out-Null
|
||||||
|
|
||||||
Write-Output "Creating ISO image..."
|
Write-Output "Creating ISO image..."
|
||||||
$ADKDepTools = "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$hostarchitecture\Oscdimg"
|
$ADKDepTools = "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$hostarchitecture\Oscdimg"
|
||||||
$localOSCDIMGPath = "$PSScriptRoot\oscdimg.exe"
|
$localOSCDIMGPath = "$PSScriptRoot\oscdimg.exe"
|
||||||
|
|
||||||
if ([System.IO.Directory]::Exists($ADKDepTools)) {
|
if ([System.IO.Directory]::Exists($ADKDepTools)) {
|
||||||
Write-Output "Will be using oscdimg.exe from system ADK."
|
Write-Output "Will be using oscdimg.exe from system ADK."
|
||||||
$OSCDIMG = "$ADKDepTools\oscdimg.exe"
|
$OSCDIMG = "$ADKDepTools\oscdimg.exe"
|
||||||
|
|
@ -507,14 +554,18 @@ if ([System.IO.Directory]::Exists($ADKDepTools)) {
|
||||||
# Finishing up
|
# Finishing up
|
||||||
Write-Output "Creation completed! Press any key to exit the script..."
|
Write-Output "Creation completed! Press any key to exit the script..."
|
||||||
Read-Host "Press Enter to continue"
|
Read-Host "Press Enter to continue"
|
||||||
|
|
||||||
Write-Output "Performing Cleanup..."
|
Write-Output "Performing Cleanup..."
|
||||||
Remove-Item -Path "$ScratchDisk\tiny11" -Recurse -Force | Out-Null
|
Remove-Item -Path "$ScratchDisk\tiny11" -Recurse -Force | Out-Null
|
||||||
Remove-Item -Path "$ScratchDisk\scratchdir" -Recurse -Force | Out-Null
|
Remove-Item -Path "$ScratchDisk\scratchdir" -Recurse -Force | Out-Null
|
||||||
|
|
||||||
Write-Output "Ejecting Iso drive"
|
Write-Output "Ejecting Iso drive"
|
||||||
Get-Volume -DriveLetter $DriveLetter[0] | Get-DiskImage | Dismount-DiskImage
|
Get-Volume -DriveLetter $DriveLetter[0] | Get-DiskImage | Dismount-DiskImage
|
||||||
Write-Output "Iso drive ejected"
|
Write-Output "Iso drive ejected"
|
||||||
|
|
||||||
Write-Output "Removing oscdimg.exe..."
|
Write-Output "Removing oscdimg.exe..."
|
||||||
Remove-Item -Path "$PSScriptRoot\oscdimg.exe" -Force -ErrorAction SilentlyContinue
|
Remove-Item -Path "$PSScriptRoot\oscdimg.exe" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
Write-Output "Removing autounattend.xml..."
|
Write-Output "Removing autounattend.xml..."
|
||||||
Remove-Item -Path "$PSScriptRoot\autounattend.xml" -Force -ErrorAction SilentlyContinue
|
Remove-Item -Path "$PSScriptRoot\autounattend.xml" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue