From 5d3acc5215fb83bbddbc7b2ebfadf884cc07a6a8 Mon Sep 17 00:00:00 2001 From: camoy Date: Wed, 26 Jun 2024 22:40:28 -0700 Subject: [PATCH] Set gpt partition attributes on partition 5 --- scripts/unattend/autounattend.xml | 697 +++++++++++++++++++++++++++++- 1 file changed, 696 insertions(+), 1 deletion(-) diff --git a/scripts/unattend/autounattend.xml b/scripts/unattend/autounattend.xml index da280a4..d14111f 100644 --- a/scripts/unattend/autounattend.xml +++ b/scripts/unattend/autounattend.xml @@ -20,7 +20,7 @@ - QPM6N-7J2WJ-P88HH-P3YRH-YY74H + 00000-00000-00000-00000-00000 true @@ -616,6 +616,701 @@ $removeCommand = { }; $type = 'Feature'; $logfile = 'C:\Windows\Temp\remove-features.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; + + + + + + + + + + ]]> + +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Sense + "Start" = REG_DWORD 4 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdBoot + "Start" = REG_DWORD 4 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdFilter + "Start" = REG_DWORD 4 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisDrv + "Start" = REG_DWORD 4 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisSvc + "Start" = REG_DWORD 4 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinDefend + "Start" = REG_DWORD 4 + + +marcus@pllaptop1:~/Downloads$ sudo ls /var/lib/libvirt/images/ +[sudo] password for marcus: +en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso +osakaOS.iso +osakaos.qcow2 +sculpt-23-10.img +sculptos.qcow2 +sweetcade-diskpart-test.qcow2 +systemrescue-11.01-amd64.iso +virtio-win-0.1.240.iso +VX2POEM_EN_winxpsp3.ISO +Win10_22H2_English_x64v1.iso +win10.qcow2 +Win11_22H2_English_x64v2.iso +win11.qcow2 +marcus@pllaptop1:~/Downloads$ cp ~/projects/Sweetcade/scripts/unattend/autounattend.xml /media/ +marcus/ root/ +marcus@pllaptop1:~/Downloads$ cp ~/projects/Sweetcade/scripts/unattend/autounattend.xml /media/marcus/UNATND/autounattend.xml +marcus@pllaptop1:~/Downloads$ sync +marcus@pllaptop1:~/Downloads$ - Nvidia GTX 700 series or newer GPU^C +marcus@pllaptop1:~/Downloads$ +marcus@pllaptop1:~/Downloads$ cat autounattend\(1\).xml + + + + + + + + en-US + + 0409:00000409 + en-US + en-US + en-US + + + + + true + + + + + 00000-00000-00000-00000-00000 + + true + + + + 1 + cmd.exe /c ">>"X:\diskpart.txt" echo SELECT DISK=0" + + + 2 + cmd.exe /c ">>"X:\diskpart.txt" echo CLEAN" + + + 3 + cmd.exe /c ">>"X:\diskpart.txt" echo CONVERT GPT" + + + 4 + cmd.exe /c ">>"X:\diskpart.txt" echo CREATE PARTITION EFI SIZE=300" + + + 5 + cmd.exe /c ">>"X:\diskpart.txt" echo FORMAT QUICK FS=FAT32 LABEL="System"" + + + 6 + cmd.exe /c ">>"X:\diskpart.txt" echo CREATE PARTITION MSR SIZE=128" + + + 7 + cmd.exe /c ">>"X:\diskpart.txt" echo CREATE PARTITION PRIMARY SIZE=2000" + + + 8 + cmd.exe /c ">>"X:\diskpart.txt" echo FORMAT QUICK FS=NTFS LABEL="Recovery"" + + + 9 + cmd.exe /c ">>"X:\diskpart.txt" echo SET ID="de94bba4-06d1-4d40-a16a-bfd50179d6ac"" + + + 10 + cmd.exe /c ">>"X:\diskpart.txt" echo GPT ATTRIBUTES=0x8000000000000001" + + + 11 + cmd.exe /c ">>"X:\diskpart.txt" echo CREATE PARTITION PRIMARY SIZE=80000" + + + 12 + cmd.exe /c ">>"X:\diskpart.txt" echo FORMAT QUICK FS=NTFS LABEL="Windows"" + + + 13 + cmd.exe /c ">>"X:\diskpart.txt" echo GPT ATTRIBUTES=0x0000000000000001" + + + 14 + cmd.exe /c ">>"X:\diskpart.txt" echo CREATE PARTITION PRIMARY" + + + 15 + cmd.exe /c ">>"X:\diskpart.txt" echo FORMAT QUICK FS=NTFS LABEL="Sweetcade"" + + + 16 + cmd.exe /c ">>"X:\diskpart.txt" echo GPT ATTRIBUTES=0x0000000000000001" + + + 17 + cmd.exe /c ">>"X:\diskpart.log" diskpart.exe /s "X:\diskpart.txt"" + + + 18 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f + + + 19 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f + + + 20 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassStorageCheck /t REG_DWORD /d 1 /f + + + 21 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassCPUCheck /t REG_DWORD /d 1 /f + + + 22 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f + + + 23 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassDiskCheck /t REG_DWORD /d 1 /f + + + 24 + cmd.exe /c ">>"X:\disable-defender.cmd" echo @ECHO OFF" + + + 25 + cmd.exe /c ">>"X:\disable-defender.cmd" echo SET file=C:\$Windows.~BT\NewOS\Windows\System32\config\SYSTEM" + + + 26 + cmd.exe /c ">>"X:\disable-defender.cmd" echo FOR /L ^%^%i IN (0) DO (" + + + 27 + cmd.exe /c ">>"X:\disable-defender.cmd" echo CALL :sleep" + + + 28 + cmd.exe /c ">>"X:\disable-defender.cmd" echo IF EXIST ^%file^% (" + + + 29 + cmd.exe /c ">>"X:\disable-defender.cmd" echo CALL :load" + + + 30 + cmd.exe /c ">>"X:\disable-defender.cmd" echo FOR ^%^%s IN (Sense WdBoot WdFilter WdNisDrv WdNisSvc WinDefend) DO reg.exe ADD HKLM\mount\ControlSet001\Services\^%^%s /v Start /t REG_DWORD /d 4 /f" + + + 31 + cmd.exe /c ">>"X:\disable-defender.cmd" echo reg.exe UNLOAD HKLM\mount" + + + 32 + cmd.exe /c ">>"X:\disable-defender.cmd" echo EXIT ) )" + + + 33 + cmd.exe /c ">>"X:\disable-defender.cmd" echo GOTO :eof" + + + 34 + cmd.exe /c ">>"X:\disable-defender.cmd" echo :load" + + + 35 + cmd.exe /c ">>"X:\disable-defender.cmd" echo reg.exe LOAD HKLM\mount ^%file^%" + + + 36 + cmd.exe /c ">>"X:\disable-defender.cmd" echo IF ^%errorlevel^% GTR 0 GOTO load" + + + 37 + cmd.exe /c ">>"X:\disable-defender.cmd" echo GOTO :eof" + + + 38 + cmd.exe /c ">>"X:\disable-defender.cmd" echo :sleep" + + + 39 + cmd.exe /c ">>"X:\disable-defender.cmd" echo ping.exe -n 1 127.0.0.1 ^> NUL" + + + 40 + cmd.exe /c ">>"X:\disable-defender.cmd" echo GOTO :eof" + + + 41 + cmd.exe /c "start /MIN X:\disable-defender.cmd" + + + + + + + + + + 1 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f + + + 2 + reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" + + + 3 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "UninstallCopilot" /t REG_SZ /d "powershell.exe -NoProfile -Command \"Get-AppxPackage -Name 'Microsoft.Windows.Ai.Copilot.Provider' | Remove-AppxPackage;\"" /f + + + 4 + reg.exe add "HKU\DefaultUser\Software\Policies\Microsoft\Windows\WindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f + + + 5 + reg.exe unload "HKU\DefaultUser" + + + 6 + reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\DevHomeUpdate" /f + + + 7 + reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" + + + 8 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Notepad" /v ShowStoreBanner /t REG_DWORD /d 0 /f + + + 9 + reg.exe unload "HKU\DefaultUser" + + + 10 + cmd.exe /c "del "C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"" + + + 11 + cmd.exe /c "del "C:\Windows\System32\OneDriveSetup.exe"" + + + 12 + cmd.exe /c "del "C:\Windows\SysWOW64\OneDriveSetup.exe"" + + + 13 + reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" + + + 14 + reg.exe delete "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Run" /v OneDriveSetup /f + + + 15 + reg.exe unload "HKU\DefaultUser" + + + 16 + reg.exe delete "HKLM\SOFTWARE\Microsoft\WindowsUpdate\Orchestrator\UScheduler_Oobe\OutlookUpdate" /f + + + 17 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v ConfigureChatAutoInstall /t REG_DWORD /d 0 /f + + + 18 + powershell.exe -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;" + + + 19 + powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-packages.ps1' -Raw | Invoke-Expression;" + + + 20 + powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-caps.ps1' -Raw | Invoke-Expression;" + + + 21 + powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-features.ps1' -Raw | Invoke-Expression;" + + + 22 + reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f + + + 23 + reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f + + + 24 + reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f + + + 25 + reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f + + + 26 + reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f + + + 27 + net.exe accounts /lockoutthreshold:0 + + + 28 + net.exe accounts /maxpwage:UNLIMITED + + + 29 + regini.exe "%TEMP%\disable-defender.ini" + + + 30 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f + + + 31 + powershell.exe -NoProfile -Command "Set-ExecutionPolicy -Scope 'LocalMachine' -ExecutionPolicy 'RemoteSigned' -Force;" + + + 32 + fsutil.exe behavior set disableLastAccess 1 + + + 33 + reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f + + + 34 + reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" + + + 35 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f + + + 36 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f + + + 37 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 38 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 39 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f + + + 40 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 41 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f + + + 42 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f + + + 43 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f + + + 44 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f + + + 45 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f + + + 46 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f + + + 47 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f + + + 48 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f + + + 49 + reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f + + + 50 + reg.exe unload "HKU\DefaultUser" + + + 51 + reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f + + + 52 + reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f + + + + + + + + + 0409:00000409 + en-US + en-US + en-US + + + + + + Sweetcade + Administrators + + UwB3ADMAMwB0AGMAQABkAGUAUABhAHMAcwB3AG8AcgBkAA== + false</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + </UserAccounts> + <AutoLogon> + <Username>Sweetcade</Username> + <Enabled>true</Enabled> + <LogonCount>1</LogonCount> + <Password> + <Value>UwB3ADMAMwB0AGMAQABkAGUAUABhAHMAcwB3AG8AcgBkAA==</Value> + <PlainText>false</PlainText> + </Password> + </AutoLogon> + <OOBE> + <ProtectYourPC>3</ProtectYourPC> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + </OOBE> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> + <Extensions xmlns="https://schneegans.de/windows/unattend-generator/"> + <ExtractScript> +param( + [xml] $Document +); + +$scriptsDir = 'C:\Windows\Setup\Scripts\'; +foreach( $file in $Document.unattend.Extensions.File ) { + $path = [System.Environment]::ExpandEnvironmentVariables( + $file.GetAttribute( 'path' ) + ); + if( $path.StartsWith( $scriptsDir ) ) { + mkdir -Path $scriptsDir -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; } + }; + [System.IO.File]::WriteAllBytes( $path, ( $encoding.GetPreamble() + $encoding.GetBytes( $file.InnerText.Trim() ) ) ); +} + </ExtractScript> + <File path="C:\Windows\Temp\remove-packages.ps1"> +$selectors = @( + 'Microsoft.Microsoft3DViewer'; + 'Microsoft.BingSearch'; + 'Microsoft.WindowsCalculator'; + 'Microsoft.WindowsCamera'; + 'Clipchamp.Clipchamp'; + 'Microsoft.WindowsAlarms'; + 'Microsoft.549981C3F5F10'; + 'Microsoft.Windows.DevHome'; + 'MicrosoftCorporationII.MicrosoftFamily'; + 'Microsoft.WindowsFeedbackHub'; + 'Microsoft.GetHelp'; + 'Microsoft.Getstarted'; + 'microsoft.windowscommunicationsapps'; + 'Microsoft.WindowsMaps'; + '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'; + 'MSTeams'; + 'Microsoft.Todos'; + 'Microsoft.WindowsSoundRecorder'; + '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\Temp\remove-packages.log'; +&amp; { + $installed = &amp; $getCommand; + foreach( $selector in $selectors ) { + $result = [ordered] @{ + Selector = $selector; + }; + $found = $installed | Where-Object -FilterScript $filterCommand; + if( $found ) { + $result.Output = $found | &amp; $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; + } +} *&gt;&amp;1 &gt;&gt; $logfile; + </File> + <File path="C:\Windows\Temp\remove-caps.ps1"> +$selectors = @( + 'Browser.InternetExplorer'; + 'MathRecognizer'; + 'Microsoft.Windows.Notepad'; + 'OpenSSH.Client'; + 'Microsoft.Windows.MSPaint'; + 'Microsoft.Windows.PowerShell.ISE'; + 'App.Support.QuickAssist'; + 'Microsoft.Windows.SnippingTool'; + 'App.StepsRecorder'; + 'Media.WindowsMediaPlayer'; + 'Microsoft.Windows.WordPad'; +); +$getCommand = { Get-WindowsCapability -Online; }; +$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\Temp\remove-caps.log'; +&amp; { + $installed = &amp; $getCommand; + foreach( $selector in $selectors ) { + $result = [ordered] @{ + Selector = $selector; + }; + $found = $installed | Where-Object -FilterScript $filterCommand; + if( $found ) { + $result.Output = $found | &amp; $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; + } +} *&gt;&amp;1 &gt;&gt; $logfile; + </File> + <File path="C:\Windows\Temp\remove-features.ps1"> +$selectors = @( + 'Microsoft-SnippingTool'; +); +$getCommand = { Get-WindowsOptionalFeature -Online; }; +$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\Temp\remove-features.log'; &amp; { $installed = &amp; $getCommand; foreach( $selector in $selectors ) {