Desmontar unidade externa USB usando o powershell

9

Eu estou tentando desmontar uma unidade USB externa usando o powershell e não consigo fazer isso com sucesso. O script a seguir é o que eu uso:

#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)

Eu, então, verifico o meu computador para verificar se a unidade está desmontada, mas não é.

Os parâmetros booleanos $ force e $ permanent foram tentados com diferentes permutações sem sucesso. O código de saída retornado pelo comando desmontar muda quando os parâmetros são alternados.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

A documentação do código de saída 2 indica que existem pontos de montagem existentes como uma das razões pelas quais não é possível desmontar. Embora eu esteja tentando desmontar o único ponto de montagem que existe, não sei ao certo o que esse código de saída está tentando me dizer.

Tendo já vasculhado a Web para pessoas com problemas semelhantes, encontrei apenas um comando adicional para tentar, e é o seguinte:

# executed after the .Dismount() command

$drive.Put() 

Este comando adicional não ajuda.

Estou ficando sem coisas para tentar, então qualquer ajuda que alguém possa me dar seria muito apreciada.

    
por JB. 09.04.2010 / 13:15

2 respostas

10

Uma solução limpa que não deixa referências abertas como a amostra do pk é:

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

Obtido no link

    
por 06.03.2014 / 18:36
1

Eu não posso fazer um ótimo trabalho respondendo a partir do final do PowerShell, você pode querer olhar para como mountvol opera . Existem diferentes graus de desmontagem.

Mountvol or Mountvol /?

Displays the name, globally unique identifier (GUID), and location of the volume.

Mountvol [drive:]path VolumeName

Creates a new volume mount point. Specify either a drive letter root directory or an existing empty NTFS directory as the source of the mount point and a volume name as the target.

Mountvol [drive:]path /D

Deletes an existing volume mount point.

Mountvol [drive:]path /L

Lists a volume name for a given volume mount point.

Eu tentei fazer algo semelhante ao que você exigia no VBScript para reordenar dispositivos em desktops antigos, onde as montagens de hardware mais antigo e tedioso para remover (leia o pendrive) estavam interferindo em atalhos de uma GUI personalizada onde eu só podia explicitar mencione mountpoints (D :, E :, F :) com uma finalidade específica. Isso se tornou extremamente frustrante, e você precisa desmontar e remontar as coisas usando as entradas e saídas do mountvol para verificar se tudo correu bem e prosseguir com as mudanças. Eu espero que você tenha mais sorte do que eu.

    
por 09.06.2011 / 09:42