Photo by Brett Jordan / Unsplash
Accès au fichier cloud est refusé avec Uninstall-Module

Accès au fichier cloud est refusé avec Uninstall-Module

Published on 19 Nov 2020

Bastien Perez
Bastien Perez

Clap

Une incohérence entre OneDrive et PowerShell

Lors de la désinstallation d’un module PowerShell avec la commande Uninstall-Module il peut arriver l’erreur suivant:

PackageManagement\Uninstall-Package : L’accès au fichier cloud est refusé 
Au caractère C:\Users\xxxxx\OneDrive – YYYY\Documents\WindowsPowerShell
\Modules\PowerShellGet\2.1.5\PSModule.psm1:12451 : 
21 + … $null = PackageManagement\Uninstall-Package @PSBoundParameters + 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : 
NotSpecified: (Microsoft.Power…ninstallPackage:UninstallPackage) \
[Uninstall-Package\], Exception + FullyQualifiedErrorId : 
System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.RemoveItemCommand,
Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage

Ce problème se produit si le module à désinstaller est présent dans C:\users\username\Documents\WindowsPowerShell\Modules.

Dans certains cas, ce dossier est synchronisé avec OneDrive (par exemple avec Known Folder Move). Le fait que ce dossier soit dans OneDrive pose problème si la fonctionnalité OneDrive Files-On-Demand (fichiers à la demande) est activée.

Certains articles indiquent de désactiver Files-On-Demand pour corriger le problème. C’est une solution mais vous risquez d’avoir une expérience OneDrive déplorable et une utilisation de votre espace disque trop important.

Il est donc préférable d’utiliser un lien symbolique de Windows comme le montre la suite de l’article.

Ne pas synchroniser le dossier WindowsPowerShell

La solution est d'exclure le dossier WindowsPowerShell de la synchronisation OneDrive tout en le conservant dans C:\users\username\Documents\.

Les paramètres OneDrive ne permettent pas directement cette exclusion. Ils permettent seulement de pas synchroniser un dossier depuis le cloud vers le PC, or notre souhait est de ne pas synchroniser depuis notre PC vers le cloud.

Pour cela, une méthode consiste à utiliser un lien symbolique.

  1. Déplacer votre dossier WindowsPowerShell dans un dossier non synchronisé par OneDrive. Dans cet article, le dossier est déplacé dans C:\users\username (variable %userprofile%).

2. Ouvrir une CMD en mode administrateur avec la commande suivante (cette commande utilise les variables d’environnements uniquement accessibles en CMD) :

mklink /d "%OneDriveCommercial%\Documents\WindowsPowerShell" "%UserProfile%\WindowsPowerShell"

Notez que l'icône de synchronisation demeurera sur le dossier WindowsPowerShell car OneDrive ne synchronise pas les liens symboliques. Toutefois, ce n'est pas un souci. L'icône OneDrive (près de l'horloge) restera opérationnelle sans montrer ce signe de synchronisation.

Comments

banner-Bastien Perez
Bastien Perez

Freelance Microsoft 365 - Active Directory - Modern Workplace

France