Démonter le lecteur externe USB à l'aide de PowerShell

12

J'essaie de démonter un lecteur USB externe à l'aide de PowerShell et je ne parviens pas à le faire. Le script suivant est ce que j'utilise:

#get the Win32Volume object representing the volume I wish to eject 

$drive = Get-WmiObject Win32_Volume -filter "DriveLetter = 'F:'"

#call dismount on that object there by ejecting drive

$drive.Dismount($Force , $Permanent)

Je vérifie ensuite mon ordinateur pour vérifier si le lecteur n'est pas monté, mais ce n'est pas le cas.

Les paramètres booléens $ force et $ permanent ont été essayés avec différentes permutations en vain. Le code de sortie renvoyé par la commande de démontage change lorsque les paramètres sont basculés.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

La documentation du code de sortie 2 indique qu'il existe des points de montage existants comme raison pour laquelle il ne peut pas être démonté. Bien que j'essaie de démonter le seul point de montage qui existe, je ne sais pas ce que ce code de sortie essaie de me dire.

Ayant déjà parcouru le Web pour les personnes rencontrant des problèmes similaires, je n'ai trouvé qu'une seule commande supplémentaire à essayer et c'est la suivante:

# executed after the .Dismount() command

$drive.Put() 

Cette commande supplémentaire n'aide pas.

Je suis à court de choses à essayer, donc toute aide que n'importe qui peut me donner serait grandement appréciée.

JB.
la source
Vous ne voulez probablement pas démonter un lecteur USB. Vous devrez réattribuer la lettre de lecteur dans la gestion des disques plus tard.
js2010

Réponses:

11

Une solution propre qui ne laisse pas de références ouvertes à moitié cuites comme le fait l'échantillon de pk:

  $driveEject = New-Object -comObject Shell.Application
  $driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject")

Récupéré de http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html

Koen Zomers
la source
Ma solution précédemment publiée était en effet correcte. Je ne sais pas trop comment je l'ai proposé! Veuillez utiliser cette méthode.
pk.
1
Notez que cela peut être exécuté en une seule ligne à partir de la boîte de dialogue Exécuter:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster
Cette doublure fonctionne mais sans les contre-obliques.
js2010
Malheureusement, cela ne fonctionne pas ici. Je ne reçois pas non plus de message d'erreur ou de message d'erreur. $?est Trueaprès avoir appelé la deuxième ligne. Y a-t'il quelque chose que je puisse faire?
René Nyffenegger
1

Je ne peux pas faire un excellent travail en répondant de l'extrémité PowerShell, vous voudrez peut-être regarder comment mountvolfonctionne . Il existe différents degrés de démontage.

Mountvol ou Mountvol /?

Affiche le nom, l'identificateur global unique (GUID) et l'emplacement du volume.

Mountvol [lecteur:] chemin VolumeName

Crée un nouveau point de montage de volume. Spécifiez un répertoire racine de lettre de lecteur ou un répertoire NTFS vide existant comme source du point de montage et un nom de volume comme cible.

Mountvol [lecteur:] chemin / D

Supprime un point de montage de volume existant.

Mountvol [lecteur:] chemin / L

Répertorie un nom de volume pour un point de montage de volume donné.

J'ai essayé de faire quelque chose de similaire à ce dont vous aviez besoin dans VBScript pour réorganiser les appareils sur les anciens bureaux où les montages de disques pour le matériel plus ancien qui étaient trop fastidieux à supprimer (lire le lecteur Flash) interféraient avec les raccourcis sur une interface graphique personnalisée où je ne pouvais que mentionner explicitement les points de montage ( D :, E :, F :) avec un but particulier. Cela est devenu extrêmement frustrant, et vous devez démonter et remonter les choses en utilisant les entrées et sorties mountvol pour vérifier que tout s'est bien passé et procéder aux modifications. J'espère que vous avez plus de chance que moi.

songei2f
la source