Last active
November 17, 2023 08:54
-
-
Save klaufir216/a744e95a0b0b5bb7371fa4c570007ec4 to your computer and use it in GitHub Desktop.
remove-onedrive.ps1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| if (-Not([Environment]::Is64BitProcess)) | |
| { | |
| Write-Output "Run this script in an x64 process. You are running this script from an x86 (32-bit) context." | |
| Exit | |
| } | |
| if (-Not([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544"))) | |
| { | |
| Write-Output "Run this script with admin rights." | |
| Exit | |
| } | |
| function New-FolderForced { | |
| [CmdletBinding(SupportsShouldProcess = $true)] | |
| param ( | |
| [Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] | |
| [string] | |
| $Path | |
| ) | |
| process { | |
| if (-not (Test-Path $Path)) { | |
| Write-Verbose "-- Creating full path to: $Path" | |
| New-Item -Path $Path -ItemType Directory -Force | |
| } | |
| } | |
| } | |
| # Description: | |
| # This script will remove and disable OneDrive integration. | |
| Write-Output "Kill OneDrive process" | |
| taskkill.exe /F /IM "OneDrive.exe" | |
| taskkill.exe /F /IM "explorer.exe" | |
| Write-Output "Remove OneDrive" | |
| if (Test-Path "$env:systemroot\System32\OneDriveSetup.exe") { | |
| & "$env:systemroot\System32\OneDriveSetup.exe" /uninstall | |
| } | |
| if (Test-Path "$env:systemroot\SysWOW64\OneDriveSetup.exe") { | |
| & "$env:systemroot\SysWOW64\OneDriveSetup.exe" /uninstall | |
| } | |
| Write-Output "Removing OneDrive leftovers" | |
| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdata\Microsoft\OneDrive" | |
| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:programdata\Microsoft OneDrive" | |
| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:systemdrive\OneDriveTemp" | |
| # check if directory is empty before removing: | |
| If ((Get-ChildItem "$env:userprofile\OneDrive" -Recurse | Measure-Object).Count -eq 0) { | |
| Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:userprofile\OneDrive" | |
| } | |
| Write-Output "Disable OneDrive via Group Policies" | |
| New-FolderForced -Path "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive" | |
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive" "DisableFileSyncNGSC" 1 | |
| Write-Output "Remove Onedrive from explorer sidebar" | |
| New-PSDrive -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT" -Name "HKCR" | |
| mkdir -Force "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" | |
| Set-ItemProperty -Path "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0 | |
| mkdir -Force "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" | |
| Set-ItemProperty -Path "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0 | |
| Remove-PSDrive "HKCR" | |
| # Thank you Matthew Israelsson | |
| Write-Output "Removing run hook for new users" | |
| reg load "hku\Default" "C:\Users\Default\NTUSER.DAT" | |
| reg delete "HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "OneDriveSetup" /f | |
| reg unload "hku\Default" | |
| Write-Output "Removing startmenu entry" | |
| Remove-Item -Force -ErrorAction SilentlyContinue "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" | |
| Write-Output "Removing scheduled task" | |
| Get-ScheduledTask -TaskPath '\' -TaskName 'OneDrive*' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false | |
| Write-Output "Restarting explorer" | |
| Start-Process "explorer.exe" | |
| Write-Output "Waiting for explorer to complete loading (sleep 10 sec)" | |
| Start-Sleep 10 | |
| # This can break Windows Update and some system utilities, see #297. | |
| #Write-Output "Removing additional OneDrive leftovers" | |
| #foreach ($item in (Get-ChildItem "$env:WinDir\WinSxS\*onedrive*")) { | |
| # Takeown-Folder $item.FullName | |
| # Remove-Item -Recurse -Force $item.FullName | |
| #} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment