Saltar al contenido

Windows10: ¿Cómo desinstalo la aplicación OneDrive a través de PowerShell?

Después de mucho luchar hemos dado con la respuesta de esta duda que muchos lectores de este sitio han presentado. Si tienes algún detalle que aportar no dejes de compartir tu información.

Solución:

Este es un script completo de PS1 para eliminar todo rastro de si:

Import-Module -DisableNameChecking $PSScriptRoot..libforce-mkdir.psm1
Import-Module -DisableNameChecking $PSScriptRoot..libtake-own.psm1

echo "73 OneDrive process and explorer"
taskkill.exe /F /IM "OneDrive.exe"
taskkill.exe /F /IM "explorer.exe"

echo "Remove OneDrive"
if (Test-Path "$env:systemrootSystem32OneDriveSetup.exe") 
    & "$env:systemrootSystem32OneDriveSetup.exe" /uninstall

if (Test-Path "$env:systemrootSysWOW64OneDriveSetup.exe") 
    & "$env:systemrootSysWOW64OneDriveSetup.exe" /uninstall


echo "Disable OneDrive via Group Policies"
force-mkdir "HKLM:SOFTWAREWow6432NodePoliciesMicrosoftWindowsOneDrive"
sp "HKLM:SOFTWAREWow6432NodePoliciesMicrosoftWindowsOneDrive" "DisableFileSyncNGSC" 1

echo "Removing OneDrive leftovers trash"
rm -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdataMicrosoftOneDrive"
rm -Recurse -Force -ErrorAction SilentlyContinue "$env:programdataMicrosoft OneDrive"
rm -Recurse -Force -ErrorAction SilentlyContinue "C:OneDriveTemp"

echo "Remove Onedrive from explorer sidebar"
New-PSDrive -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT" -Name "HKCR"
mkdir -Force "HKCR:CLSID18D5C66-4533-4307-9B53-224DE2ED1FE6"
sp "HKCR:CLSID18D5C66-4533-4307-9B53-224DE2ED1FE6" "System.IsPinnedToNameSpaceTree" 0
mkdir -Force "HKCR:Wow6432NodeCLSID18D5C66-4533-4307-9B53-224DE2ED1FE6"
sp "HKCR:Wow6432NodeCLSID18D5C66-4533-4307-9B53-224DE2ED1FE6" "System.IsPinnedToNameSpaceTree" 0
Remove-PSDrive "HKCR"

echo "Removing run option for new users"
reg load "hkuDefault" "C:UsersDefaultNTUSER.DAT"
reg delete "HKEY_USERSDefaultSOFTWAREMicrosoftWindowsCurrentVersionRun" /v "OneDriveSetup" /f
reg unload "hkuDefault"

echo "Removing startmenu junk entry"
rm -Force -ErrorAction SilentlyContinue "$env:userprofileAppDataRoamingMicrosoftWindowsStart MenuProgramsOneDrive.lnk"

echo "Restarting explorer..."
start "explorer.exe"

echo "Wait for EX reload.."
sleep 15

echo "Removing additional OneDrive leftovers"
foreach ($item in (ls "$env:WinDirWinSxS*onedrive*")) 
    Takeown-Folder $item.FullName
    rm -Recurse -Force $item.FullName

Si desea la forma de desinstalación fácil, abra cmd en modo de administrador, escriba taskkill /f /im OneDrive.exe para finalizar el proceso de OneDrive.

Luego escribe ya sea %SystemRoot%System32OneDriveSetup.exe /uninstall si está usando 32 bits o %SystemRoot%SysWOW64OneDriveSetup.exe /uninstall si está utilizando Windows 10 de 64 bits.

Actualización: Función para la creación de directorios forzada:

function force-mkdir($path) 
if (!(Test-Path $path)) 
    #Write-Host "-- Creating full path to: " $path -ForegroundColor White -BackgroundColor DarkGreen
    New-Item -ItemType Directory -Force -Path $path

Asimilación de la propiedad del registro:

    function Takeown-Registry($key) 
    # TODO does not work for all root keys yet
    switch ($key.split('')[0]) 
        "HKEY_CLASSES_ROOT" 
            $reg = [Microsoft.Win32.Registry]::ClassesRoot
            $key = $key.substring(18)
        
        "HKEY_CURRENT_USER" 
            $reg = [Microsoft.Win32.Registry]::CurrentUser
            $key = $key.substring(18)
        
        "HKEY_LOCAL_MACHINE" 
            $reg = [Microsoft.Win32.Registry]::LocalMachine
            $key = $key.substring(19)
        
    

    # get administraor group
    $admins = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
    $admins = $admins.Translate([System.Security.Principal.NTAccount])

    # set owner
    $key = $reg.OpenSubKey($key, "ReadWriteSubTree", "TakeOwnership")
    $acl = $key.GetAccessControl()
    $acl.SetOwner($admins)
    $key.SetAccessControl($acl)

    # set FullControl
    $acl = $key.GetAccessControl()
    $rule = New-Object System.Security.AccessControl.RegistryAccessRule($admins, "FullControl", "Allow")
    $acl.SetAccessRule($rule)
    $key.SetAccessControl($acl)


function Takeown-File($path) 
    takeown.exe /A /F $path
    $acl = Get-Acl $path

    # get administraor group
    $admins = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
    $admins = $admins.Translate([System.Security.Principal.NTAccount])

    # add NT AuthoritySYSTEM
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admins, "FullControl", "None", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl -Path $path -AclObject $acl


function Takeown-Folder($path) 
    Takeown-File $path
    foreach ($item in Get-ChildItem $path) 
        if (Test-Path $item -PathType Container) 
            Takeown-Folder $item.FullName
         else 
            Takeown-File $item.FullName
        
    


function Elevate-Privileges 
    param($Privilege)
    $Definition = @"
    using System;
    using System.Runtime.InteropServices;
    public class AdjPriv 
        [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr rele);
        [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
        [DllImport("advapi32.dll", SetLastError = true)]
            internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
            internal struct TokPriv1Luid 
                public int Count;
                public long Luid;
                public int Attr;
            
        internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
        internal const int TOKEN_QUERY = 0x00000008;
        internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
        public static bool EnablePrivilege(long processHandle, string privilege) 
            bool retVal;
            TokPriv1Luid tp;
            IntPtr hproc = new IntPtr(processHandle);
            IntPtr htok = IntPtr.Zero;
            retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES 
    
"@
    $ProcessHandle = (Get-Process -id $pid).Handle
    $type = Add-Type $definition -PassThru
    $type[0]::EnablePrivilege($processHandle, $Privilege)

Solo conozco un método CMD para desinstalar OneDrive:

  1. Abra el símbolo del sistema como administrador

  2. Escribir taskkill /f /im OneDrive.exe para terminar cualquier proceso de OneDrive y presione Enter.

  3. Escribir %SystemRoot%SysWOW64OneDriveSetup.exe /uninstall si está usando Windows 10 de 64 bits y presione Enter.

No verá un cuadro de diálogo de confirmación o una barra de progreso cuando haga esto, pero si intenta buscar OneDrive, la aplicación ya no se encontrará. Por supuesto, su carpeta y archivos de OneDrive, sin embargo, seguirán estando disponibles.

Aquí está el método CMD de Origami en PowerShell:

ps onedrive | Stop-Process -Force
start-process "$env:windirSysWOW64OneDriveSetup.exe" "/uninstall"

Recuerda que tienes la capacidad de valorar este enunciado si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *