D'abord, du contexte :
Je prépare environ 20 portables pour un programme éducatif en prison. Cet environnement a des défis particuliers. Les étudiants (détenus) ne peuvent en aucun cas avoir accès à quoi que ce soit ressemblant à un email ou une messagerie.
Ils ne peuvent donc pas avoir de comptes Microsoft et n'auront pas accès à un domaine AD ou Entra Identity ; seuls les comptes locaux conviennent (la suppression des messages insistants pour le compte MS sera une autre question), et la gestion par GPO/SCCM/Intune/MDM est exclue.
Ils ne peuvent pas non plus avoir OneDrive sur l'ordinateur. Si un étudiant parvenait à ouvrir OneDrive, il pourrait créer un dossier partagé avec l'extérieur et échanger des messages via des fichiers texte.
Oui, nous devons être aussi prudents, et les conséquences d'un échec sont des sanctions auxquelles je préfère ne pas penser.
De plus, même si OneDrive sera bloqué sur le réseau de la prison, les machines seront inspectées avant livraison et la présence de OneDrive ferait échouer l'inspection.
Il n'y a pas de vrai support technique sur site. Le coordinateur éducatif reçoit un compte admin local et des instructions pour créer des utilisateurs locaux. Le processus doit donc fonctionner par défaut pour les nouveaux utilisateurs.
J'ai un lot de machines, avec potentiellement d'autres à venir. Je pars d'installations Windows fraîches, même modèle actuellement, mais le prochain lot sera probablement différent. Je voudrais que ce soit scripté et reproductible.
En bref (trop tard), je veux m'assurer que OneDrive est totalement supprimé de façon reproductible ; le script final tournera probablement quotidiennement en tâche planifiée. C'est pour tous les utilisateurs, y compris ceux pas encore créés.
Jusqu'ici j'ai ceci :
# Make sure OneDrive isn't later changed to be a Windows Store app
Get-AppxPackage -AllUsers "*OneDrive*" | Remove-AppxPackage -AllUsers
# But really OneDrive uses any of five possible locations:
# Windows\System, Windows\System32, Windows\SysWOW64, Program Files, and Program Files (x86)
# Need to check all five
if (Test-Path "C:\Windows\System\OneDriveSetup.exe") {
start -wait -filepath "C:\Windows\System\OneDriveSetup.exe" -argumentlist "/uninstall","/qn"
}
if (Test-Path "C:\Windows\System32\OneDriveSetup.exe") {
start -wait -filepath "C:\Windows\System32\OneDriveSetup.exe" -argumentlist "/uninstall","/qn"
}
if (Test-Path "C:\Windows\SysWOW64\OneDriveSetup.exe") {
start -wait -filepath "C:\Windows\SysWOW64\OneDriveSetup.exe" -argumentlist "/uninstall","/qn"
}
# Program Files locations also have a version number subfolder that may change over time
if (Test-path "C:\Program Files\Microsoft OneDrive") {
$folder = (get-childitem "C:\Program Files\Microsoft OneDrive").Name | ?{ $_ -match "^\d{2}.*" }
# can be several folders. Only one will have the uninstaller
$folder | % {
if (Test-Path "C:\Program Files\Microsoft OneDrive\$_\OneDriveSetup.exe") {
$path = "C:\Program Files\Microsoft OneDrive\$_\OneDriveSetup.exe"
start -wait -filepath $path -argumentlist "/uninstall","/qn"
}
}
}
if (Test-path "C:\Program Files (x86)\Microsoft OneDrive") {
$folder = (get-childitem "C:\Program Files (x86)\Microsoft OneDrive").Name | ?{ $_ -match "^\d{2}.*" }
# can be several folders. Only one will have the uninstaller
$folder | % {
if (Test-Path "C:\Program Files (x86)\Microsoft OneDrive\$_\OneDriveSetup.exe") {
$path = "C:\Program Files (x86)\Microsoft OneDrive\$_\OneDriveSetup.exe"
start -wait -filepath $path -argumentlist "/uninstall","/qn"
}
}
}
# Also look in WinSXS
$ods = get-childitem "C:\Windows\WinSxS\amd64_microsoft-windows-onedrive-setup*"
if ($ods) {
$path = "C:\Windows\WinSxS\$($ods.Name)\*.*"
# Don't need to uninstall; just remove files. But also need to take ownership first
takeown /F $path /A | Out-Null
icacls $path /grant Administrators:M | Out-Null
remove-item -path $path -force
}
J'inclus ce script pour montrer ce qui est fait, pas pour demander de l'aide avec le code.
J'ai aussi la possibilité d'ajouter des modifications au registre du profil utilisateur par défaut :
reg load HKU\default c:\users\default\ntuser.dat
reg import .\DefaultRegistryFixes.reg
reg unload HKU\default
Ainsi tout dans DefaultRegistryFixes.reg référençant HKEY_USERS\default sera écrit dans les paramètres des nouveaux utilisateurs. Le fichier contient environ 40 modifications. Rien sur OneDrive pour l'instant, car il doit être complètement supprimé, pas juste désactivé. Mais toute protection supplémentaire via le registre est bienvenue.
Mon problème :
Après tout ça, OneDrive est absent du compte admin initial. Mais si je crée un nouvel utilisateur local et me connecte, OneDrive apparaît dans la zone de notification. Le Gestionnaire des tâches montre le .exe dans le dossier App Data du nouvel utilisateur.
Qu'est-ce qui me manque ? Comment supprimer OneDrive définitivement ?