Je suis en train de construire un script de sauvegarde pour Windows 7, et la dernière action que je souhaite effectuer consiste à "supprimer" en toute sécurité le lecteur USB sur lequel il est en train de sauvegarder. J'ai l'impression que le fait de brancher le lecteur sur le même port USB conservera toujours le même DEV_ID (corrigez-moi si je me trompe). Avec une ligne de commande (ou PowerShell), comment puis-je dire à Windows de supprimer automatiquement le matériel en toute sécurité, sans intervention de l'utilisateur?
En tant que titulaire de réservation, il serait bon de connaître d’autres systèmes d’exploitation pouvant le faire.
RemoveDrive m'a bien servi par le passé
Outre RemoveDrive de Uwe Sieber, mentionné dans l’autre réponse), de nombreux utilitaires peuvent le faire. Une petite liste suit:
USB Disk Ejector est principalement un utilitaire basé sur une interface graphique, mais peut également être utilisé à partir de la ligne de commande pour éjecter le lecteur à partir duquel le programme est exécuté, ou tout lecteur en spécifiant la lettre du lecteur./nom de lecteur (partiel)/point de montage, etc. Source libre et ouverte.
USB Safely Remove n’est pas gratuit, mais c’est un utilitaire de suppression de disque sous stéroïdes, avec de nombreuses fonctionnalités avancées , y compris bien sûr support de ligne de commande . Zentimo est son grand frère, avec pairmorefeatures .
La propre version de Microsoft DevCon est la version en ligne de commande du Gestionnaire de périphériques. Outre la version d'origine Win2K/XP disponible sur la page de la Base de connaissances, il existe des versions plus récentes (32 et 64 bits) disponible à partir de diverses sources MS mentionnées dans ce Où trouver DevCon.exe article. DevCon.exe pour Windows 7 (et probablement aussi pour Windows 8) peut être trouvé enterré dans le Windows Driver Kit (WDK)) approprié , comme mentionné dans ce fil (qui contient également des liens de téléchargement vers le fichier exécutable extrait ).
devcon status *
ou devcon hwids *
ou devcon findall =usb
pour une liste plus compacte) devrait vous indiquer l'ID matériel du périphérique. Par exemple:
USB\VID_0781 & PID_7113\0001162825
Nom: Périphérique de stockage de masse USB
Le pilote est en cours d'exécution.
Vous pouvez ensuite essayer de supprimer le périphérique avec devcon remove "USB\VID_0781&PID_7113"
(les caractères génériques tels que * sont autorisés, mais soyez prudent, sinon vous pourriez supprimer quelque chose d'autre!)
Quelqu'un a demandé "_ (Existe-t-il une commande DOS Invite (cmd.exe de Win7) pour éjecter une clé USB? " Qui a malheureusement été fermée en tant que duplicata de ce fil. Toutefois, la question portait sur l'éjection des clés USB lors du Console de récupération Windows / Invite de commandes de récupération système , il est donc peu probable que l'un des utilitaires ci-dessus vous aide. Dans ce cas, utilisez la méthode suivante ( Diskpart devrait fonctionner:
Tapez diskpart
et attendez l'invite de la part du disque (DISKPART>
)
Tapez list volume
Notez attentivement le numéro de volume du lecteur USB (utilisez les propriétés répertoriées, telles que la lettre du lecteur, l'étiquette, le type et la taille, pour obtenir de l'aide).
Tapez select volume <number>
, où <number>
est le numéro de volume indiqué ci-dessus.
Tapez remove all dismount
Tapez exit
pour quitter Diskpart
Vous devriez maintenant pouvoir retirer en toute sécurité votre clé USB sans craindre la perte de données.
Pour répondre à this question ... Vous n'avez pas besoin de matériel tiers.
Avec une ligne de commande (ou PowerShell), comment puis-je demander à Windows de supprimer automatiquement le matériel en toute sécurité, sans intervention de l'utilisateur?
Exécutez la commande suivante: RunDll32.exe Shell32.dll,Control_RunDLL hotplug.dll
pour afficher la boîte de dialogue Supprimer le périphérique en toute sécurité:
Puisqu'il s'agit d'un périphérique de sauvegarde, cela signifie qu'il s'agit d'un périphérique de stockage. Par conséquent, vous pouvez le faire à partir de PowerShell. Il vous suffit de remplacer X: par la lettre de votre choix:
$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
Selon cet article 7tutorials , vous pouvez activer le débranchement sans danger en sélectionnant "Retrait rapide". Cela désactivera la mise en cache en écriture par périphérique, dont l'impact sur les performances est "négligeable"? Leurs étapes pour Windows 7 sont ci-dessous.
( Edit ) Selon cet article de howtogeek , vous devez rester prudent lorsque vous définissez "Suppression rapide". Cela désactivera la mise en cache en écriture et évitera ainsi la plupart des problèmes Mais certains programmes peuvent toujours écrire des choses «en direct», jusqu'à ce qu'ils soient explicitement éjectés/supprimés. ( Fin de montage )
Pas:
( Edit ) Notez que vous devez utiliser le Gestionnaire de périphériques pour modifier le paramètre. Cela ne peut pas être effectué à partir de l'explorateur de fichiers. (Au moins dans mon édition de Windows 10).