Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing Windows apps such as Clipchamp and Quick Assist #279

Open
ScribbleGhost opened this issue Nov 5, 2023 · 7 comments
Open

Add missing Windows apps such as Clipchamp and Quick Assist #279

ScribbleGhost opened this issue Nov 5, 2023 · 7 comments
Labels
enhancement New feature or request help wanted Extra attention is needed
Milestone

Comments

@ScribbleGhost
Copy link

Problem description

Hi 👋
Currently privacy.sexy does not support removing Clipchamp and Quick Assist. These apps are included by default in the 23H2 (OS Build 22631.2428) image.

Proposed solution

Get-AppxPackage 'Clipchamp.Clipchamp' | Remove-AppxPackage
Get-AppxPackage 'MicrosoftCorporationII.QuickAssist' | Remove-AppxPackage

Probably needs some de-provisioning as well, idk. I don't really understand what this means yet 😅

Alternatives considered

Additional information

Image used: Win11_23H2_English_x64.iso
SHA-256: 71A7AE6974866603D366A911B0C00EACE476E0B49D12205D7529765CC50B4B39

Windows 11 x64-2023-11-05-14-19-42

Windows 11 x64-2023-11-05-14-20-14

@ScribbleGhost ScribbleGhost added the enhancement New feature or request label Nov 5, 2023
@undergroundwires undergroundwires added this to the 0.13.0 milestone Nov 6, 2023
@undergroundwires
Copy link
Owner

Hi, thank you for report. I will add both.

Missing apps in privacy.sexy

I did some comprehensive research and revisited all apps after you flag this. I see that we're missing disabling of these apps:

Name Type Windows 10 (19H2) Windows 10 (20H2) Windows 10 (21H2) Windows 10 (22H2) Windows 11 (21H2) Windows 11 (22H2) Windows 11 (23H2)
Microsoft.Windows.ShellExperienceHost System
Windows.immersivecontrolpanel System
Microsoft.Windows.CallingShellApp System
NcsiUwpApp System
Microsoft.Windows.NarratorQuickStart System
Microsoft.Windows.StartMenuExperienceHost System
Microsoft.Windows.XGpuEjectDialog System
MicrosoftWindows.Client.CBS System
MicrosoftWindows.Client.Core System
MicrosoftWindows.UndockedDevKit System
Clipchamp.Clipchamp User
Microsoft.GamingApp User
Microsoft.HEVCVideoExtension User
Microsoft.OneDriveSync User
Microsoft.Paint User
Microsoft.PowerAutomateDesktop User
Microsoft.RawImageExtension User
Microsoft.SecHealthUI User
Microsoft.Windows.PrintQueueActionCenter System
Microsoft.WindowsNotepad User
Microsoft.WindowsTerminal User
MicrosoftCorporationII.QuickAssist User
MicrosoftWindows.Client.FileExp System

What should we exclude?

I guess these are the apps that we should not add to privacy sexy to provide more safety to end-user:

  • Microsoft.Windows.ShellExperienceHost: "Start app", required for different setting windows such as WiFi and battery panes in action bar.
  • Windows.immersivecontrolpanel: "Settings app", required for settings view.

Is there any more apps here that we should exclude from privacy.sexy?

P.S: Renaming the issue to be more generic to cover our discussion.

@undergroundwires undergroundwires changed the title Debloat Clipchamp and Quick Assist Add missing Windows apps such as Clipchamp and Quick Assist Nov 6, 2023
@undergroundwires undergroundwires added the help wanted Extra attention is needed label Nov 6, 2023
@ScribbleGhost
Copy link
Author

ScribbleGhost commented Nov 8, 2023

Well done 👍

The only things I see missing are:

Microsoft.549981C3F5F10
Microsoft.BingWeather
Microsoft.WindowsSoundRecorder
MicrosoftTeams

That last one (Teams) is a strange one. Even if I try to deprovision it in the registry with: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deprovisioned\MicrosoftTeams_8wekyb3d8bbwe, when making a new user it sometimes appears. That is; it appears as a provisioned package. But I have not been able to consistently reproduce it. Something is at play here, but I don't know what.

@undergroundwires
Copy link
Owner

Request for information -A More data about teams installation

Another great recommendation. I worked on Teams before but did not make it to a release. But we can have it as part 0.13.0. I don't have Teams preinstalled on VMs I run. Could you run these on cmd provide me some info to understand what the OS defaults to?

@echo off

echo Appx info
Powershell -Command "Get-AppxPackage MicrosoftTeams"

echo Provisioned info
Powershell -Command "Get-AppxProvisionedPackage -Online | where {$_.PackageName -like '*Teams*'}"

echo LOCALAPPDATA\Microsoft\Teams
dir %LOCALAPPDATA%\Microsoft\Teams\

echo LOCALAPPDATA\Microsoft\Teams\Current
dir %LOCALAPPDATA%\Microsoft\Teams\Current\

echo Taskbar
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

echo Teams temp dir
dir %LocalAppData%\SquirrelTemp

echo Teams app data
dir %AppData%\Microsoft\Teams

echo Teams temp dir
dir %LocalAppData%\SquirrelTemp

echo Office keys
reg query HKCU\Software\Microsoft\Office

echo Office/Addins keys
reg query HKCU\Software\Microsoft\Office\Outlook\Addins

echo Teams app store installation dir
dir "%SYSTEMDRIVE%\Program Files\WindowsApps\MicrosoftTeams*"

echo Teams app user-specific data dir
dir "%LOCALAPPDATA%\Packages\MicrosoftTeams*"

echo Teams app package metadata
dir "%PROGRAMDATA%\Microsoft\Windows\AppRepository\Packages\MicrosoftTeams*"

Getting rid of provisioned packages

Yea, "provisioned package" is what Microsoft installs on each user per default. I can add soft deleting for these app), making it unreachable to system until reverted by privacy.sexy. This is what we do for system apps. It will complicate the generated code a bit but it will be more robust. Something like this:

Soft-delete teams package data:

:: Soft delete files matching pattern  : "%SYSTEMDRIVE%\Program Files\WindowsApps\MicrosoftTeams_*_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$pathGlobPattern = "^""%SYSTEMDRIVE%\Program Files\WindowsApps\MicrosoftTeams_*_8wekyb3d8bbwe\*"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }"
:: Soft delete files matching pattern  : "%LOCALAPPDATA%\Packages\MicrosoftTeams_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$pathGlobPattern = "^""%LOCALAPPDATA%\Packages\MicrosoftTeams_8wekyb3d8bbwe\*"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }"
:: Soft delete files matching pattern (with additional permissions) : "%PROGRAMDATA%\Microsoft\Windows\AppRepository\Packages\MicrosoftTeams_*_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$pathGlobPattern = "^""%PROGRAMDATA%\Microsoft\Windows\AppRepository\Packages\MicrosoftTeams_*_8wekyb3d8bbwe\*"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; Add-Type -TypeDefinition "^""using System;`r`nusing System.Runtime.InteropServices;`r`npublic class Privileges {`r`n    [DllImport(`"^""advapi32.dll`"^"", ExactSpelling = true, SetLastError = true)]`r`n    internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,`r`n        ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);`r`n    [DllImport(`"^""advapi32.dll`"^"", ExactSpelling = true, SetLastError = true)]`r`n    internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);`r`n    [DllImport(`"^""advapi32.dll`"^"", SetLastError = true)]`r`n    internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);`r`n    [StructLayout(LayoutKind.Sequential, Pack = 1)]`r`n    internal struct TokPriv1Luid {`r`n        public int Count;`r`n        public long Luid;`r`n        public int Attr;`r`n    }`r`n    internal const int SE_PRIVILEGE_ENABLED = 0x00000002;`r`n    internal const int TOKEN_QUERY = 0x00000008;`r`n    internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;`r`n    public static bool AddPrivilege(string privilege) {`r`n        try {`r`n            bool retVal;`r`n            TokPriv1Luid tp;`r`n            IntPtr hproc = GetCurrentProcess();`r`n            IntPtr htok = IntPtr.Zero;`r`n            retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);`r`n            tp.Count = 1;`r`n            tp.Luid = 0;`r`n            tp.Attr = SE_PRIVILEGE_ENABLED;`r`n            retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);`r`n            retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);`r`n            return retVal;`r`n        } catch (Exception ex) {`r`n            throw new Exception(`"^""Failed to adjust token privileges`"^"", ex);`r`n        }`r`n    }`r`n    public static bool RemovePrivilege(string privilege) {`r`n        try {`r`n            bool retVal;`r`n            TokPriv1Luid tp;`r`n            IntPtr hproc = GetCurrentProcess();`r`n            IntPtr htok = IntPtr.Zero;`r`n            retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);`r`n            tp.Count = 1;`r`n            tp.Luid = 0;`r`n            tp.Attr = 0;  // This line is changed to revoke the privilege`r`n            retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);`r`n            retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);`r`n            return retVal;`r`n        } catch (Exception ex) {`r`n            throw new Exception(`"^""Failed to adjust token privileges`"^"", ex);`r`n        }`r`n    }`r`n    [DllImport(`"^""kernel32.dll`"^"", CharSet = CharSet.Auto)]`r`n    public static extern IntPtr GetCurrentProcess();`r`n}"^""; [Privileges]::AddPrivilege('SeRestorePrivilege') | Out-Null; [Privileges]::AddPrivilege('SeTakeOwnershipPrivilege') | Out-Null; $adminSid = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-544'; $adminAccount = $adminSid.Translate([System.Security.Principal.NTAccount]); $adminFullControlAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $adminAccount, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.AccessControlType]::Allow ); $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; $originalAcl = Get-Acl -Path "^""$originalFilePath"^""; $accessGranted = $false; try {; $acl = Get-Acl -Path "^""$originalFilePath"^""; $acl.SetOwner($adminAccount) <# Take Ownership (because file is owned by TrustedInstaller) #>; $acl.AddAccessRule($adminFullControlAccessRule) <# Grant rights to be able to move the file #>; Set-Acl -Path $originalFilePath -AclObject $acl -ErrorAction Stop; $accessGranted = $true; } catch {; Write-Warning "^""Failed to grant access to `"^""$originalFilePath`"^"": $($_.Exception.Message)"^""; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; if ($accessGranted) {; try {; Set-Acl -Path $newFilePath -AclObject $originalAcl -ErrorAction Stop; } catch {; Write-Warning "^""Failed to restore access on `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; }; }; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; if ($accessGranted) {; try {; Set-Acl -Path $originalFilePath -AclObject $originalAcl -ErrorAction Stop; } catch {; Write-Warning "^""Failed to restore access on `"^""$originalFilePath`"^"": $($_.Exception.Message)"^""; }; }; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }; [Privileges]::RemovePrivilege('SeRestorePrivilege') | Out-Null; [Privileges]::RemovePrivilege('SeTakeOwnershipPrivilege') | Out-Null"

If you want to restore this later, this it the revert code for teams package data:

:: Restore files matching pattern  : "%SYSTEMDRIVE%\Program Files\WindowsApps\MicrosoftTeams_*_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$revert = $true; $pathGlobPattern = "^""%SYSTEMDRIVE%\Program Files\WindowsApps\MicrosoftTeams_*_8wekyb3d8bbwe\*.OLD"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }"
:: Restore files matching pattern  : "%LOCALAPPDATA%\Packages\MicrosoftTeams_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$revert = $true; $pathGlobPattern = "^""%LOCALAPPDATA%\Packages\MicrosoftTeams_8wekyb3d8bbwe\*.OLD"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }"
:: Restore files matching pattern (with additional permissions) : "%PROGRAMDATA%\Microsoft\Windows\AppRepository\Packages\MicrosoftTeams_*_8wekyb3d8bbwe\*"
PowerShell -ExecutionPolicy Unrestricted -Command "$revert = $true; $pathGlobPattern = "^""%PROGRAMDATA%\Microsoft\Windows\AppRepository\Packages\MicrosoftTeams_*_8wekyb3d8bbwe\*.OLD"^""; $expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern); Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""; $renamedCount   = 0; $skippedCount   = 0; $failedCount    = 0; Add-Type -TypeDefinition "^""using System;`r`nusing System.Runtime.InteropServices;`r`npublic class Privileges {`r`n    [DllImport(`"^""advapi32.dll`"^"", ExactSpelling = true, SetLastError = true)]`r`n    internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,`r`n        ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);`r`n    [DllImport(`"^""advapi32.dll`"^"", ExactSpelling = true, SetLastError = true)]`r`n    internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);`r`n    [DllImport(`"^""advapi32.dll`"^"", SetLastError = true)]`r`n    internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);`r`n    [StructLayout(LayoutKind.Sequential, Pack = 1)]`r`n    internal struct TokPriv1Luid {`r`n        public int Count;`r`n        public long Luid;`r`n        public int Attr;`r`n    }`r`n    internal const int SE_PRIVILEGE_ENABLED = 0x00000002;`r`n    internal const int TOKEN_QUERY = 0x00000008;`r`n    internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;`r`n    public static bool AddPrivilege(string privilege) {`r`n        try {`r`n            bool retVal;`r`n            TokPriv1Luid tp;`r`n            IntPtr hproc = GetCurrentProcess();`r`n            IntPtr htok = IntPtr.Zero;`r`n            retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);`r`n            tp.Count = 1;`r`n            tp.Luid = 0;`r`n            tp.Attr = SE_PRIVILEGE_ENABLED;`r`n            retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);`r`n            retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);`r`n            return retVal;`r`n        } catch (Exception ex) {`r`n            throw new Exception(`"^""Failed to adjust token privileges`"^"", ex);`r`n        }`r`n    }`r`n    public static bool RemovePrivilege(string privilege) {`r`n        try {`r`n            bool retVal;`r`n            TokPriv1Luid tp;`r`n            IntPtr hproc = GetCurrentProcess();`r`n            IntPtr htok = IntPtr.Zero;`r`n            retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);`r`n            tp.Count = 1;`r`n            tp.Luid = 0;`r`n            tp.Attr = 0;  // This line is changed to revoke the privilege`r`n            retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);`r`n            retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);`r`n            return retVal;`r`n        } catch (Exception ex) {`r`n            throw new Exception(`"^""Failed to adjust token privileges`"^"", ex);`r`n        }`r`n    }`r`n    [DllImport(`"^""kernel32.dll`"^"", CharSet = CharSet.Auto)]`r`n    public static extern IntPtr GetCurrentProcess();`r`n}"^""; [Privileges]::AddPrivilege('SeRestorePrivilege') | Out-Null; [Privileges]::AddPrivilege('SeTakeOwnershipPrivilege') | Out-Null; $adminSid = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-544'; $adminAccount = $adminSid.Translate([System.Security.Principal.NTAccount]); $adminFullControlAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $adminAccount, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.AccessControlType]::Allow ); $foundAbsolutePaths = @(); Write-Host 'Iterating files and directories recursively.'; try {; $foundAbsolutePaths += @(; Get-ChildItem -Path $expandedPath -Force -Recurse -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; try {; $foundAbsolutePaths += @(; Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName; ); } catch [System.Management.Automation.ItemNotFoundException] {; <# Swallow, do not run `Test-Path` before, it's unreliable for globs requiring extra permissions #>; }; $foundAbsolutePaths = $foundAbsolutePaths | Select-Object -Unique | Sort-Object -Property { $_.Length } -Descending; if (!$foundAbsolutePaths) {; Write-Host 'Skipping, no items available.'; exit 0; }; Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""; foreach ($path in $foundAbsolutePaths) {; if (Test-Path -Path $path -PathType Container) {; Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""; $skippedCount++; continue; }; if($revert -eq $true) {; if (-not $path.EndsWith('.OLD')) {; Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; } else {; if ($path.EndsWith('.OLD')) {; Write-Host "^""Skipping backup file: `"^""$path`"^""."^""; $skippedCount++; continue; }; }; $originalFilePath = $path; Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""; if (-Not (Test-Path $originalFilePath)) {; Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""; $skippedCount++; exit 0; }; $originalAcl = Get-Acl -Path "^""$originalFilePath"^""; $accessGranted = $false; try {; $acl = Get-Acl -Path "^""$originalFilePath"^""; $acl.SetOwner($adminAccount) <# Take Ownership (because file is owned by TrustedInstaller) #>; $acl.AddAccessRule($adminFullControlAccessRule) <# Grant rights to be able to move the file #>; Set-Acl -Path $originalFilePath -AclObject $acl -ErrorAction Stop; $accessGranted = $true; } catch {; Write-Warning "^""Failed to grant access to `"^""$originalFilePath`"^"": $($_.Exception.Message)"^""; }; if ($revert -eq $true) {; $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4); } else {; $newFilePath = "^""$($originalFilePath).OLD"^""; }; try {; Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop; Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""; $renamedCount++; if ($accessGranted) {; try {; Set-Acl -Path $newFilePath -AclObject $originalAcl -ErrorAction Stop; } catch {; Write-Warning "^""Failed to restore access on `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; }; }; } catch {; Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""; $failedCount++; if ($accessGranted) {; try {; Set-Acl -Path $originalFilePath -AclObject $originalAcl -ErrorAction Stop; } catch {; Write-Warning "^""Failed to restore access on `"^""$originalFilePath`"^"": $($_.Exception.Message)"^""; }; }; }; }; if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {; Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""; }; if ($failedCount -gt 0) {; Write-Warning "^""Failed to processed $($failedCount) items."^""; }; [Privileges]::RemovePrivilege('SeRestorePrivilege') | Out-Null; [Privileges]::RemovePrivilege('SeTakeOwnershipPrivilege') | Out-Null"

@ScribbleGhost
Copy link
Author

Sure here is what I gathered:

(some of the commands would not run.."The system cannot find the file specified.", "File Not Found", "ERROR: The system was unable to find the specified registry key or value.")

Appx info


Name              : MicrosoftTeams
Publisher         : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture      : X64
ResourceId        : 
Version           : 23258.704.2395.9691
PackageFullName   : MicrosoftTeams_23258.704.2395.9691_x64__8wekyb3d8bbwe
InstallLocation   : C:\Program Files\WindowsApps\MicrosoftTeams_23258.704.2395.9691_x64__8wekyb3d8bbwe
IsFramework       : False
PackageFamilyName : MicrosoftTeams_8wekyb3d8bbwe
PublisherId       : 8wekyb3d8bbwe
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
NonRemovable      : False
IsPartiallyStaged : False
SignatureKind     : Developer
Status            : Ok



Provisioned info


DisplayName  : MicrosoftTeams
Version      : 23258.704.2395.9691
Architecture : x64
ResourceId   : 
PackageName  : MicrosoftTeams_23258.704.2395.9691_x64__8wekyb3d8bbwe
Regions      : all



LOCALAPPDATA\Microsoft\Teams
LOCALAPPDATA\Microsoft\Teams\Current
Taskbar

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
    Start_SearchFiles    REG_DWORD    0x2
    ServerAdminUI    REG_DWORD    0x0
    Hidden    REG_DWORD    0x2
    ShowCompColor    REG_DWORD    0x1
    HideFileExt    REG_DWORD    0x1
    DontPrettyPath    REG_DWORD    0x0
    ShowInfoTip    REG_DWORD    0x1
    HideIcons    REG_DWORD    0x0
    MapNetDrvBtn    REG_DWORD    0x0
    WebView    REG_DWORD    0x1
    Filter    REG_DWORD    0x0
    ShowSuperHidden    REG_DWORD    0x0
    SeparateProcess    REG_DWORD    0x0
    AutoCheckSelect    REG_DWORD    0x0
    IconsOnly    REG_DWORD    0x0
    ShowTypeOverlay    REG_DWORD    0x1
    ShowStatusBar    REG_DWORD    0x1
    ListviewAlphaSelect    REG_DWORD    0x1
    ListviewShadow    REG_DWORD    0x1
    TaskbarAnimations    REG_DWORD    0x1
    TaskbarSizeMove    REG_DWORD    0x0
    DisablePreviewDesktop    REG_DWORD    0x1
    TaskbarSmallIcons    REG_DWORD    0x0
    TaskbarGlomLevel    REG_DWORD    0x0
    MMTaskbarGlomLevel    REG_DWORD    0x0
    TaskbarAutoHideInTabletMode    REG_DWORD    0x0
    ShellMigrationLevel    REG_DWORD    0x3
    TaskbarMn    REG_DWORD    0x1
    StartMigratedBrowserPin    REG_DWORD    0x1
    ReindexedProfile    REG_DWORD    0x1
    StartMenuInit    REG_DWORD    0xd
    TaskbarStateLastRun    REG_BINARY    356B4C6500000000
    WinXMigrationLevel    REG_DWORD    0x1
    StartShownOnUpgrade    REG_DWORD    0x1

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\StartMode
Teams temp dir
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\Users\user\AppData\Local

Teams app data
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\Users\user\AppData\Roaming\Microsoft

Teams temp dir
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\Users\user\AppData\Local

Office keys
Office/Addins keys
Teams app store installation dir
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\Program Files\WindowsApps

11/09/2023  04:22 PM    <DIR>          MicrosoftTeams_23258.704.2395.9691_x64__8wekyb3d8bbwe
               0 File(s)              0 bytes
               1 Dir(s)  44,305,883,136 bytes free
Teams app user-specific data dir
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\Users\user\AppData\Local\Packages

11/09/2023  04:22 PM    <DIR>          MicrosoftTeams_8wekyb3d8bbwe
               0 File(s)              0 bytes
               1 Dir(s)  44,305,883,136 bytes free
Teams app package metadata
 Volume in drive C has no label.
 Volume Serial Number is 946C-CE23

 Directory of C:\ProgramData\Microsoft\Windows\AppRepository\Packages

11/09/2023  04:22 PM    <DIR>          MicrosoftTeams_23258.704.2395.9691_x64__8wekyb3d8bbwe
               0 File(s)              0 bytes
               1 Dir(s)  44,305,883,136 bytes free

Judging by the Event Viewer I can see that Teams was installed (by itself) 4:22 PM hours after I started the computer and probably after waking from sleep. As you can tell it's kind of random when this is installed.

Windows 11 x64-2023-11-09-18-58-54

undergroundwires added a commit that referenced this issue Jan 1, 2024
This commit improves documentation for removal of Windows store apps
along with adding related research.

1. Improve Store app removal documentation:
   The documentation for scripts that remove Store apps has been
   enhanced. It now includes information on the default preinstallation
   status of these apps across various Windows versions. This update
   covers Windows 10 (from version 19H2 to 23H2) and Windows 11 (from
   version 21H2 to 23H2), enabling users to identify potentially
   preinstalled apps that might affect privacy.

2. Add research documentation:
   A detailed research documentation on Windows Store apps has been
   introduced for Windows 10 (versions 1909 to 22H2) and Windows 11
   (versions 21H2 to 23H2). This includes lists of preinstalled Store
   apps, complete with package information. This research aids in
   understanding which default apps are present in different Windows
   versions and their status regarding removal. The documentation also
   includes the PowerShell script used for this research, serving as a
   resource for future updates and expansion.
undergroundwires added a commit that referenced this issue Jan 10, 2024
This commit adds missing extension apps seen since Windows 11 22H2 and
improves documentation scripts and category of extension app removal.

Addition of new extension apps found since Windows 11 22H2:

- HEVC Video Extensions (`Microsoft.HEVCVideoExtension`)
- Raw Image Extension (`Microsoft.RawImageExtension`)

Documentation improvements:

- Fix links that are not correctly archived.
- Add cautionary notes for all extension app removal scripts.
- Add security implications associated with these extensions.
undergroundwires added a commit that referenced this issue Jan 10, 2024
This commit adds missing extension apps seen since Windows 11 22H2 and
improves documentation scripts and category of extension app removal.

Addition of new extension apps found since Windows 11 22H2:

- HEVC Video Extensions (`Microsoft.HEVCVideoExtension`)
- Raw Image Extension (`Microsoft.RawImageExtension`)

Documentation improvements:

- Fix links that are not correctly archived.
- Add cautionary notes for all extension app removal scripts.
- Add security implications associated with these extensions.
@undergroundwires
Copy link
Owner

Update: Some of the new apps are added in 0.12.10. I'll slowly add all of the remaining apps. I do comprehensive research and add documentation before adding them that takes some time.

undergroundwires added a commit that referenced this issue Mar 25, 2024
This commit improves Windows scripts related to phone apps, extending
documentation, renaming scripts for clarity, removing unnecessary
scripts and adjusting recommendation levels.

Changes:

- Add script to disable the 'Call' system app, identified as missing in
  issue #279.
- Update documentation for each phone-related app to include
  descriptions and cautionary advice, focusing on privacy and
  system performance benefits.
- Rename scripts for better alignment with actual app names and to
  correct misconceptions:
  - 'Communications - Phone' to 'Microsoft Phone'
  - 'Your Phone Companion' to 'Your Phone'
- Remove the script for deleting `Microsoft.Windows.Phone` package,
  correcting a community misreport.
- Adjust recommendations to remove Phone-related apps, considering their
  limited necessity for OS functionality and common software use.
@plantindesk
Copy link

plantindesk commented Mar 29, 2024

Update: Some of the new apps are added in 0.12.10. I'll slowly add all of the remaining apps. I do comprehensive research and add documentation before adding them that takes some time.

For Windows 10 ( all versions)
MSPaint exists in System32 And SysWOW64

Script:

$systemDirectories = @("C:\Windows\System32", "C:\Windows\SysWOW64")

foreach ($directory in $systemDirectories) {
    if (Test-Path -Path "$directory\mspaint.exe") {
        Write-Host "Microsoft Paint found, starting uninstallation..."
        
        $registryKeyPath = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\{7BA8E1F5-E0DF-4B7D-BADA-9BE0CD9DCDBA}"
        
        if (Test-Path -Path $registryKeyPath) {
            Remove-Item -Path $registryKeyPath -Recurse
            Write-Host "MSPaint registry key deleted."
            
            Get-ChildItem -Path $directory -Filter mspaint.exe -Recurse | ForEach-Object {
                Remove-Item -Path $_.FullName -Force
                Write-Host ("{0} deleted." -f $_.FullName)
            }
            
            Write-Host "Microsoft Paint has been successfully uninstalled!"
        } else {
            Write-Warning "Registry key not found! Cannot proceed with uninstallation."
        }
        
        break
    }
}

if (-not($systemDirectories | Where-Object { Test-Path -Path "$_\\mspaint.exe" })) {
    Write-Host "Microsoft Paint was not found on this system."
}

@undergroundwires
Copy link
Owner

Paint, Wordpad and Notepad was deliberately excluded from privacy.sexy, see #26 (comment). Is there any reason to disable it?

P.S: This issue is getting to big covering "all missing apps" and it's hard to discuss them and track the work in the same thread. It would be much easier to manage the work when we create new issues for each missing app in future, I would appreciate it.

undergroundwires added a commit that referenced this issue May 23, 2024
- Consolidate removal of printing UIs under the same category.
- Improve documentation for printing app removal scripts.
- Add removal of previously unlisted 'Print Queue' app, #279.
- Combine removal of `Microsoft.Print3D` and `Windows.Print3D`
  into a single script.
- Highlight the importance of removing 'Print 3D' app due to
  security risks and recommend it on 'Standard'.
undergroundwires added a commit that referenced this issue Aug 10, 2024
- Group NCSI disabling under single category for better organization.
- Remove NCSI from 'Strict' recommendations due to side effects
  (addressing #189, #216).
- Improve documentation with cautions about breaking internet status and
  captive portals (addressing #189, #216).
- Add removal of new `NcsiUwpApp` system app #279.
- Add more ways to disable the feature.
- Add ability to constrain Windows version in `DisableService`.
undergroundwires added a commit that referenced this issue Aug 30, 2024
This commit adds missing system apps for Windows 10 19H2 to 22H2 and
Windows 21H2 to 23H2.

Changes:

- Add missing system apps.
- Improve documentation and naming of existing apps
- Add documentation about excluded system apps (#343)
- Adjust recommendation levels
- Enhance disabling of some apps with extra configurations

New apps added:

- Microsoft.MicrosoftEdge.Stable
- MicrosoftWindows.UndockedDevKit
- Microsoft.Windows.XGpuEjectDialog
- NarratorQuickStart

New apps excluded:

- Microsoft.Windows.StartMenuExperienceHost (#316)
- Microsoft.Windows.ShellExperienceHost (#316)
- MicrosoftWindows.Client.Core
- MicrosoftWindows.Client.CBS
- MicrosoftWindows.Client.FileExp
- Microsoft.Windows.Cortana

Other supporting changes:

- Add conditional store app removal when constraining Windows version
- Add more generated comments in code for better script readability
undergroundwires added a commit that referenced this issue Aug 30, 2024
This commit adds missing system apps for Windows 10 19H2 to 22H2 and
Windows 11 21H2 to 23H2.

Changes:

- Add missing system apps.
- Improve documentation and naming of existing apps
- Add documentation about excluded system apps (#343)
- Adjust recommendation levels
- Enhance disabling of some apps with extra configurations

New apps added:

- Microsoft.MicrosoftEdge.Stable
- MicrosoftWindows.UndockedDevKit
- Microsoft.Windows.XGpuEjectDialog
- NarratorQuickStart

New apps excluded:

- Microsoft.Windows.StartMenuExperienceHost (#316)
- Microsoft.Windows.ShellExperienceHost (#316)
- MicrosoftWindows.Client.Core
- MicrosoftWindows.Client.CBS
- MicrosoftWindows.Client.FileExp
- Microsoft.Windows.Cortana

Other supporting changes:

- Add conditional store app removal when constraining Windows version
- Add more generated comments in code for better script readability
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants