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
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.
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
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.