Browse Source

Admin check and GUI prompts

Added an admin check to see if the script is running with admin right, if it isn't then it'll close and reopen with admin right and continue on.

Also added a GUI to replace the need for "read-host" to get a response from USER
Damian 7 years ago
parent
commit
4c3dd2003d
1 changed files with 71 additions and 54 deletions
  1. 71 54
      Windows10Debloater.ps1

+ 71 - 54
Windows10Debloater.ps1

@@ -1,6 +1,13 @@
 #This function finds any AppX/AppXProvisioned package and uninstalls it, except for Freshpaint, Windows Calculator, Windows Store, and Windows Photos.
 #Also, to note - This does NOT remove essential system services/software/etc such as .NET framework installations, Cortana, Edge, etc.
 
+#Checks for the script running as admin and if it's not then restarts the script in admin
+Add-Type -AssemblyName PresentationCore,PresentationFramework
+If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]'Administrator')) {
+  Start-Process powershell.exe -ArgumentList ("-NoProfile -ExecutionPolicy Bypass -File `"{0}`"" -f $PSCommandPath) -Verb RunAs
+  Exit
+}
+
 If (Test-Path "C:\Windows10Debloater") {
     Write-Output "C:\Windows10Debloater exists. Skipping."
 }
@@ -11,6 +18,10 @@ Else {
 }
 
 Start-Transcript -OutputDirectory "C:\Windows10Debloater"
+
+#no errors throughout
+$ErrorActionPreference = 'silentlycontinue'
+
 Function Start-Debloat {
     
     [CmdletBinding()]
@@ -20,8 +31,8 @@ Function Start-Debloat {
     #Removes AppxPackages
     #Credit to /u/GavinEke for a modified version of my whitelist code
     [regex]$WhitelistedApps = 'Microsoft.Paint3D|Microsoft.WindowsCalculator|Microsoft.WindowsStore|Microsoft.Windows.Photos|CanonicalGroupLimited.UbuntuonWindows|Microsoft.XboxGameCallableUI|Microsoft.XboxGamingOverlay|Microsoft.Xbox.TCUI'
-    Get-AppxPackage -AllUsers | Where-Object {$_.Name -NotMatch $WhitelistedApps} | Remove-AppxPackage -ErrorAction SilentlyContinue
-    Get-AppxProvisionedPackage -Online | Where-Object {$_.PackageName -NotMatch $WhitelistedApps} | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
+    Get-AppxPackage -AllUsers | Where-Object {$_.Name -NotMatch $WhitelistedApps} | Remove-AppxPackage
+    Get-AppxProvisionedPackage -Online | Where-Object {$_.PackageName -NotMatch $WhitelistedApps} | Remove-AppxProvisionedPackage -Online
 }
 Function Remove-Keys {
         
@@ -67,7 +78,7 @@ Function Remove-Keys {
     #This writes the output of each key it is removing and also removes the keys listed above.
     ForEach ($Key in $Keys) {
         Write-Output "Removing $Key from registry"
-        Remove-Item $Key -Recurse -ErrorAction SilentlyContinue
+        Remove-Item $Key -Recurse
     }
 }
             
@@ -97,18 +108,18 @@ Function Protect-Privacy {
     $Period2 = 'HKCU:\Software\Microsoft\Siuf\Rules'
     $Period3 = 'HKCU:\Software\Microsoft\Siuf\Rules\PeriodInNanoSeconds'
     If (!(Test-Path $Period3)) { 
-        mkdir $Period1 -ErrorAction SilentlyContinue
-        mkdir $Period2 -ErrorAction SilentlyContinue
-        mkdir $Period3 -ErrorAction SilentlyContinue
-        New-ItemProperty $Period3 -Name PeriodInNanoSeconds -Value 0 -Verbose -ErrorAction SilentlyContinue
+        mkdir $Period1
+        mkdir $Period2
+        mkdir $Period3
+        New-ItemProperty $Period3 -Name PeriodInNanoSeconds -Value 0 -Verbose
     }
                    
     Write-Output "Adding Registry key to prevent bloatware apps from returning"
     #Prevents bloatware applications from returning
     $registryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"
     If (!(Test-Path $registryPath)) {
-        Mkdir $registryPath -ErrorAction SilentlyContinue
-        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 1 -Verbose -ErrorAction SilentlyContinue
+        Mkdir $registryPath 
+        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 1 -Verbose 
     }          
         
     Write-Output "Setting Mixed Reality Portal value to 0 so that you can uninstall it in Settings"
@@ -121,7 +132,7 @@ Function Protect-Privacy {
     Write-Output "Disabling live tiles"
     $Live = 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications'    
     If (!(Test-Path $Live)) {
-        mkdir $Live -ErrorAction SilentlyContinue     
+        mkdir $Live      
         New-ItemProperty $Live -Name NoTileApplicationNotification -Value 1 -Verbose
     }
         
@@ -136,7 +147,7 @@ Function Protect-Privacy {
     Write-Output "Disabling People icon on Taskbar"
     $People = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People'    
     If (!(Test-Path $People)) {
-        mkdir $People -ErrorAction SilentlyContinue
+        mkdir $People 
         New-ItemProperty $People -Name PeopleBand -Value 0 -Verbose
     }
     
@@ -163,32 +174,32 @@ Function Stop-EdgePDF {
     #Stops edge from taking over as the default .PDF viewer
     If (!(Get-ItemProperty 'HKCR:\.pdf' -Name NoOpenWith)) {
         $NoOpen = 'HKCR:\.pdf'
-        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose 
     }
         
     If (!(Get-ItemProperty 'HKCR:\.pdf' -Name NoStaticDefaultVerb)) {
         $NoStatic = 'HKCR:\.pdf'
-        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose 
     }
         
     If (!(Get-ItemProperty 'HKCR:\.pdf\OpenWithProgids' -Name NoOpenWith)) {
         $NoOpen = 'HKCR:\.pdf\OpenWithProgids'
-        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose 
     }
         
     If (!(Get-ItemProperty 'HKCR:\.pdf\OpenWithProgids' -Name NoStaticDefaultVerb)) {
         $NoStatic = 'HKCR:\.pdf\OpenWithProgids'
-        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose 
     }
         
     If (!(Get-ItemProperty 'HKCR:\.pdf\OpenWithList' -Name NoOpenWith)) {
         $NoOpen = 'HKCR:\.pdf\OpenWithList'
-        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoOpen -Name NoOpenWith -Verbose 
     }
         
     If (!(Get-ItemProperty 'HKCR:\.pdf\OpenWithList' -Name NoStaticDefaultVerb)) {
         $NoStatic = 'HKCR:\.pdf\OpenWithList'
-        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $NoStatic -Name NoStaticDefaultVerb -Verbose 
     }
         
     #Appends an underscore '_' to the Registry key for Edge
@@ -197,6 +208,7 @@ Function Stop-EdgePDF {
         Set-Item $Edge AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723_ -Verbose
     }
 }
+
 Function Revert-Changes {   
             
     [CmdletBinding()]
@@ -206,7 +218,7 @@ Function Revert-Changes {
     #This function will revert the changes you made when running the Start-Debloat function.
         
     #This line reinstalls all of the bloatware that was removed
-    Get-AppxPackage -AllUsers | ForEach {Add-AppxPackage -Verbose -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} -ErrorAction SilentlyContinue
+    Get-AppxPackage -AllUsers | ForEach {Add-AppxPackage -Verbose -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} 
         
     Write-Output "Re-enabling key to show advertisement information"
     #Tells Windows to enable your advertising information.
@@ -227,7 +239,7 @@ Function Revert-Changes {
     If (!('HKCU:\Software\Microsoft\Siuf\Rules\PeriodInNanoSeconds')) { 
         mkdir 'HKCU:\Software\Microsoft\Siuf\Rules\PeriodInNanoSeconds'
         $Period = 'HKCU:\Software\Microsoft\Siuf\Rules\PeriodInNanoSeconds'
-        New-Item $Period -ErrorAction SilentlyContinue
+        New-Item $Period 
         Set-ItemProperty -Name PeriodInNanoSeconds -Value 1 -Verbose
     }
                    
@@ -235,8 +247,8 @@ Function Revert-Changes {
     #Enables bloatware applications
     If ('HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent') {
         $registryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"
-        Mkdir $registryPath -ErrorAction SilentlyContinue
-        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 0 -Verbose -ErrorAction SilentlyContinue
+        Mkdir $registryPath 
+        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 0 -Verbose 
     }
         
     #Changes Mixed Reality Portal Key 'FirstRunSucceeded' to 1
@@ -249,17 +261,17 @@ Function Revert-Changes {
     #Re-enables live tiles
     Write-Output "Enabling live tiles"
     If ('HKCU:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications') {
-        mkdir 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications' -ErrorAction SilentlyContinue       
+        mkdir 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications'        
         $Live = 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications'
-        New-ItemProperty $Live -Name NoTileApplicationNotification -Value 0 -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $Live -Name NoTileApplicationNotification -Value 0 -Verbose 
     }
                
     Write-Output "Changing the 'Cloud Content' registry key value to 1 to allow bloatware apps to reinstall"
     #Prevents bloatware applications from returning
     If ("HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent\") {
         $registryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"
-        Mkdir $registryPath -ErrorAction SilentlyContinue
-        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 1 -Verbose -ErrorAction SilentlyContinue
+        Mkdir $registryPath 
+        New-ItemProperty $registryPath -Name DisableWindowsConsumerFeatures -Value 1 -Verbose 
     }
         
     #Re-enables data collection
@@ -273,7 +285,7 @@ Function Revert-Changes {
     Write-Output "Enabling People icon on Taskbar"
     If ('HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People') {
         $People = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People'
-        New-ItemProperty $People -Name PeopleBand -Value 1 -Verbose -ErrorAction SilentlyContinue
+        New-ItemProperty $People -Name PeopleBand -Value 1 -Verbose 
     }
     
     #Re-enables suggestions on start menu
@@ -285,12 +297,12 @@ Function Revert-Changes {
         
     #Re-enables scheduled tasks that were disabled when running the Debloat switch
     Write-Output "Enabling scheduled tasks that were disabled"
-    Get-ScheduledTask -TaskName XblGameSaveTaskLogon | Enable-ScheduledTask -ErrorAction SilentlyContinue
-    Get-ScheduledTask -TaskName XblGameSaveTask | Enable-ScheduledTask -ErrorAction SilentlyContinue
-    Get-ScheduledTask -TaskName Consolidator | Enable-ScheduledTask -ErrorAction SilentlyContinue
-    Get-ScheduledTask -TaskName UsbCeip | Enable-ScheduledTask -ErrorAction SilentlyContinue
-    Get-ScheduledTask -TaskName DmClient | Enable-ScheduledTask -ErrorAction SilentlyContinue
-    Get-ScheduledTask -TaskName DmClientOnScenarioDownload | Enable-ScheduledTask -ErrorAction SilentlyContinue
+    Get-ScheduledTask -TaskName XblGameSaveTaskLogon | Enable-ScheduledTask 
+    Get-ScheduledTask -TaskName XblGameSaveTask | Enable-ScheduledTask 
+    Get-ScheduledTask -TaskName Consolidator | Enable-ScheduledTask 
+    Get-ScheduledTask -TaskName UsbCeip | Enable-ScheduledTask 
+    Get-ScheduledTask -TaskName DmClient | Enable-ScheduledTask 
+    Get-ScheduledTask -TaskName DmClientOnScenarioDownload | Enable-ScheduledTask 
 }
     
 Function Enable-EdgePDF {
@@ -350,13 +362,21 @@ Function FixWhitelistedApps {
 }
 
 
-#Switch statement containing Debloat/Revert options
-Write-Output "The following options will allow you to either Debloat Windows 10, or to revert changes made after Debloating Windows 10.
-        Choose 'Debloat' to Debloat Windows 10 or choose 'Revert' to revert changes made by this script." 
-$Readhost = Read-Host " ( Debloat / Revert ) " 
-Switch ($ReadHost) {
+#GUI prompt Debloat/Revert options and GUI variables
+$Button = [Windows.MessageBoxButton]::YesNo
+$ErrorIco = [Windows.MessageBoxImage]::Error
+$Warn = [Windows.MessageBoxImage]::Warning
+$Ask = 'The following will allow you to either Debloat Windows 10, or to revert changes made after Debloating Windows 10.
+        Choose "Yes" to Debloat Windows 10
+        Choose "No" to revert changes made by this script.'
+$EdgePdf = 'Do you want to stop edge from taking over as the default PDF viewer?'
+$EdgePdf2 = 'Do you want to revert changes that disabled Edge as the default PDF viewer?'
+$Reboot = 'For some of the changes to properly take effect it is recommended to reboot your machine. Would you like to restart?'
+
+$Prompt1 = [Windows.MessageBox]::Show($Ask,'Debloat or Revert',$Button,$ErrorIco) 
+Switch ($Prompt1) {
     #This will debloat Windows 10
-    Debloat {
+    Yes {
         #Creates a "drive" to access the HKCR (HKEY_CLASSES_ROOT)
         Write-Output "Creating PSDrive 'HKCR' (HKEY_CLASSES_ROOT). This will be used for the duration of the script as it is necessary for the removal and modification of specific registry keys."
         New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
@@ -377,10 +397,9 @@ Switch ($ReadHost) {
         Protect-Privacy
         Write-Output "Cortana disabled from search, feedback to Microsoft has been disabled, and scheduled tasks are disabled."
         Start-Sleep 1; $PublishSettings = $Debloat
-    
-        Write-Output "Do you want to stop edge from taking over as the default PDF viewer?"
-        $ReadHost = Read-Host " (Yes / No ) "
-        Switch ($ReadHost) {
+
+        $Prompt2 = [Windows.MessageBox]::Show($EdgePdf,'Edge PDF',$Button,$Warn)
+        Switch ($Prompt2) {
             Yes {
                 Stop-EdgePDF
                 Write-Output "Edge will no longer take over as the default PDF viewer."; $PublishSettings = $Yes
@@ -389,10 +408,9 @@ Switch ($ReadHost) {
                 $PublishSettings = $No
             }
         }
-        #Switch statement asking if you'd like to reboot your machine
-        Write-Output "For some of the changes to properly take effect it is recommended to reboot your machine. Would you like to restart?"
-        $ReadHost = Read-Host " ( Yes / No ) " 
-        Switch ($Readhost) {
+        #Prompt asking if you'd like to reboot your machine
+        $Prompt3 = [Windows.MessageBox]::Show($Reboot,'Reboot',$Button,$Warn) 
+        Switch ($Prompt3) {
             Yes {
                 Write-Output "Unloading the HKCR drive..."
                 Remove-PSDrive HKCR 
@@ -413,24 +431,23 @@ Switch ($ReadHost) {
             }
         }
     }
-    Revert {
+    No {
         Write-Output "Reverting changes..."
         Write-Output "Creating PSDrive 'HKCR' (HKEY_CLASSES_ROOT). This will be used for the duration of the script as it is necessary for the modification of specific registry keys."
         New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
         Revert-Changes; $PublishSettings = $Revert
-        Write-Output "Do you want to revert changes that disabled Edge as the default PDF viewer?"
-        $ReadHost = Read-Host " (Yes / No ) "
-        Switch ($ReadHost) {
+        #Prompt asking to revert edge changes as well
+        $Prompt4 = [Windows.MessageBox]::Show($EdgePdf2,'Revert Edge',$Button,$ErrorIco)
+        Switch ($Prompt4) {
             Yes {
                 Enable-EdgePDF
                 Write-Output "Edge will no longer be disabled from being used as the default Edge PDF viewer."; $PublishSettings = $Yes
             }
             No {$PublishSettings = $No}
         }
-        #Switch statement asking if you'd like to reboot your machine
-        Write-Output "For some of the changes to properly take effect it is recommended to reboot your machine. Would you like to restart?"
-        $Readhost = Read-Host " ( Yes / No ) "
-        Switch ($Readhost) {
+        #Prompt asking if you'd like to reboot your machine
+        $Prompt5 = [Windows.MessageBox]::Show($Reboot,'Reboot',$Button,$Warn)
+        Switch ($Prompt5) {
             Yes {
                 Write-Output "Unloading the HKCR drive..."
                 Remove-PSDrive HKCR