15 votes

Démonter un lecteur externe USB à l'aide de powershell

Je tente de démonter un lecteur USB externe en utilisant powershell et je ne parviens pas à le faire avec succès. 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 sur mon ordinateur si le disque est démonté, mais ce n'est pas le cas.

Les paramètres booléens $force et $permanent ont été essayés avec différentes permutations, sans succès. Le code de sortie renvoyé par la commande dismount change lorsque les paramètres sont modifiés.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

La documentation relative au code de sortie 2 indique qu'il existe des points de montage existants pour expliquer l'impossibilité de démonter. Bien que j'essaie de démonter le seul point de montage qui existe, je ne suis pas sûr de ce que ce code de sortie essaie de me dire.

Ayant déjà parcouru le web pour trouver des personnes rencontrant des problèmes similaires, je n'ai trouvé qu'une seule commande supplémentaire à essayer, à savoir la suivante :

# executed after the .Dismount() command

$drive.Put() 

Cette commande supplémentaire n'est d'aucune utilité.

Je suis à court de choses à essayer, alors toute aide que vous pouvez m'apporter sera grandement appréciée.

14voto

Koen Zomers Points 281

Une solution propre qui ne laisse pas de références ouvertes 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

2voto

songei2f Points 1924

Je ne peux pas répondre de manière satisfaisante du point de vue de PowerShell, mais vous pouvez consulter le site suivant comment mountvol fonctionne . Il existe différents degrés de démontage.

Mountvol ou Mountvol / ?

Affiche le nom, unique au monde unique (GUID) et l'emplacement du volume. volume.

Mountvol [drive :]path VolumeName

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

Mountvol [drive :]path /D

Supprime un montage de volume existant point.

Mountvol [drive :]path /L

Liste le nom d'un volume pour un volume donné point de montage.

J'ai essayé de faire quelque chose de similaire à ce que vous avez demandé en VBScript pour réorganiser les périphériques sur de vieux bureaux où les montages de lecteurs pour du matériel plus ancien qui était trop fastidieux à supprimer (lire lecteur Flash) interférait avec des raccourcis sur une interface graphique personnalisée où je ne pouvais mentionner explicitement que les points de montage (D :, E :, F :) avec un but particulier. Cela est devenu super frustrant, et vous devez démonter et remonter les choses en utilisant les entrées et sorties de mountvol pour vérifier que tout s'est bien passé et procéder aux changements. J'espère que vous aurez plus de chance que moi.

1voto

Zimba Points 101

Powershell, comme CMD, peut appeler des objets COM Win qui ont les fonctions nécessaires pour monter ou démonter les lecteurs de disque, par exemple Shell.Application.

Dans powershell, par exemple via cmd :

powershell "$driveEject = New-Object -comObject Shell.Application; $driveEject.Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\"); start-sleep -s 3"

L'éjection d'un disque par l'intermédiaire de powershell nécessite également qu'il soit débranché et rebranché pour être monté à nouveau. Sinon, le disque peut simplement être démonté et devenir inaccessible jusqu'à ce qu'il soit remonté par l'une des méthodes suivantes mountvol o diskpart .

par exemple, avec mountvol :

REM unmount
mountvol e: /D or /P
REM mount for access
mountvol e: \\?\Volume{device GUID in hex with hyphens}\

mountvol permet de monter des périphériques dans un dossier, par exemple. C:\fakedisk\ ainsi qu'une lettre de lecteur.

eg. Avec diskpart :

REM unmount
(
echo select volume 3
echo remove letter=e dismount
) | diskpart

REM mount again for access
(
echo select volume 3
echo assign letter=e
) | diskpart

Testé dans Win 10 cmd


SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X