Remova o dispositivo USB da linha de comando

61

Estou construindo um script de backup para o Windows 7, e a última ação que quero executar é "remover" com segurança a unidade USB para a qual está fazendo backup. Tenho a impressão de que conectar a unidade na mesma porta USB o tempo todo manterá o mesmo DEV_ID (me corrija se estiver errado). Com uma linha de comando (ou PowerShell), como posso dizer ao Windows para remover o hardware com segurança automaticamente sem a entrada do usuário?

Assim como um espaço reservado, seria bom saber outros sistemas operacionais que possam ter uma maneira de fazer isso.

O canadense Luke REINSTATE MONICA
fonte
5
Eu tenho que admitir decepção por algumas das "respostas" abaixo, que claramente não entenderam o que está sendo solicitado e forneceram opções que são obviamente inúteis para a tarefa de automação, conforme solicitado. ಠ_ಠ
Synetech
> Tenho a impressão de que conectar a unidade sempre na mesma porta USB manterá o mesmo DEV_ID, me corrija se estiver errado. Está correto. O Windows trata uma unidade e a porta na qual está conectada como um par de identificação. Ao conectá-lo a uma porta diferente (na qual nunca foi conectada), você ativará a função de instalação do driver do Windows. Pior ainda, se você atribuiu uma letra de unidade não consecutiva ao volume, conectá-la a uma nova porta não reterá essa letra e receberá a próxima letra disponível e você deverá atribuir uma letra manualmente novamente.
Synetech
11
(Curiosamente, se você conectar uma unidade a uma porta e permitir que o Windows instale drivers para ela, atribua uma letra de unidade não consecutiva a ela e desconecte-a de uma unidade diferente da mesma marca, modelo, e tamanho, o Windows irá tratá-lo exatamente como se você tivesse conectado a unidade anterior novamente.)
Synetech
Você pode atualizar o título para estar correto. Eu estava procurando respostas sobre como remover "dispositivos" USB e não "unidades" USB.

Respostas:

32

RemoveDrive me serviu bem no passado

stijn
fonte
4
RemoveDrive \ x64> RemoveDrive.exe f: -L é o código, para aqueles que estão com pressa
fedmich
Isso acabou funcionando para mim. Curiosamente, uma WqlEventQuery que eu liguei ainda aguarda para disparar até que você puxe fisicamente a unidade. Não sei muito sobre essas coisas, mas isso me surpreendeu. Não é um problema para mim neste caso.
samuelesque
11
RemoveDrive é bom, mas o problema é que ele realmente remove toda a unidade. Para leitores de cartão, em vez de simplesmente ejetar o cartão (como clicar com o botão direito do mouse e selecionar Ejetar em Meu computador) e permitir que você conecte outro, ele remove todo o leitor de cartão, exigindo que ele seja desconectado e reconectado fisicamente conectado, ou pior, reiniciando se o leitor de cartão estiver embutido (é possível fazê-lo através de software, mas é irritante).
Synetech
Você também pode executá-lo no cygwin.
Kevin Sadler
65

Além do RemoveDrive de Uwe Sieber mencionado na outra resposta, há vários utilitários que podem fazer isso. Segue uma pequena lista:

  • O Ejetor de disco USB é principalmente um utilitário baseado em GUI, mas pode ser usado igualmente da linha de comando para ejetar a unidade da qual o programa está sendo executado ou qualquer outra unidade, especificando a letra da unidade / nome da unidade / ponto de montagem etc. Livre e de código aberto.

    Ejetor de disco USB

  • O USB Safely Remove não é gratuito, mas é um utilitário de remoção de disco em esteróides, com muitos recursos avançados , incluindo, obviamente , suporte à linha de comando . Zentimo é seu irmão maior, com ainda mais recursos .

    USB remover com segurança

  • O próprio DevCon da Microsoft é a versão de linha de comando do Gerenciador de dispositivos. Além da versão original da era Win2K / XP, disponível na página KB, há versões mais recentes (32 e 64 bits) disponíveis em várias fontes da Microsoft, conforme mencionado neste artigo Onde encontrar DevCon.exe . O DevCon.exe para Windows 7 (e provavelmente também o Windows 8) pode ser encontrado enterrado no Windows Driver Kit (WDK) apropriado , conforme mencionado neste tópico (que também contém links de download para o executável extraído ).

    devcon status *ou devcon hwids *ou devcon findall =usb(para uma listagem mais compacta) deve informar o ID do hardware do dispositivo. Por exemplo:

    USB \ VID_0781 e PID_7113 \ 0001162825
    Nome: O
    driver do dispositivo de armazenamento em massa USB está em execução.

    Você pode tentar remover o dispositivo com devcon remove "USB\VID_0781&PID_7113"(caracteres curinga como * são permitidos, mas tenha cuidado, ou você pode acabar removendo algo completamente diferente!)


Alguém perguntou " Existe um comando do prompt do DOS (cmd.exe do Win7) para ejetar um pen drive? ", Que infelizmente foi fechado como uma duplicata desse segmento. No entanto, a pergunta era sobre a ejeção de unidades USB enquanto estiver no prompt de comando do Console de recuperação do Windows / Recuperação do sistema , portanto, é improvável que qualquer um dos utilitários acima ajude. Em tal situação, o seguinte método usando o Diskpart deve funcionar:

  1. Digite diskparte aguarde o prompt do diskpart ( DISKPART>)

  2. Tipo list volume

  3. Anote o número do volume da unidade USB com cuidado (use as propriedades listadas, como letra, etiqueta, tipo e tamanho da unidade, para obter ajuda)

  4. Tipo select volume <number>, onde <number>é o número do volume indicado acima

    Diskpart

  5. Tipo remove all dismount

  6. Digite exitpara sair do Diskpart

Agora você deve poder remover com segurança sua unidade USB sem medo de perda de dados.

Karan
fonte
11
Obrigado por reservar um tempo para responder à minha pergunta mesmo depois que a SU a fechou. Fui em frente e segui a sugestão de Jared Tritsch e removi a unidade apenas removendo-a. Depois que o laptop estiver operacional novamente, testarei com o DISKPART. Aqui está o link para as especificações da Microsoft para DISKPART. technet.microsoft.com/en-us/library/bb490893.aspx
zundarz
2
@zundarz: De nada! A política de remoção padrão no Windows para dispositivos removíveis é a remoção rápida , que desativou o cache de gravação e permite remover a unidade sem a necessidade de removê-la com segurança primeiro. Veja esta imagem para mais informações. Portanto, a sugestão de Jared sobre puxar a unidade normalmente não deve causar perda de dados se as unidades removíveis forem tratadas da mesma maneira no Console de recuperação. Ainda assim, para ter tranqüilidade, sempre tomo o cuidado de remover cada unidade antes de retirá-la. Pode ser um placebo, mas me impede de me preocupar. :)
Karan
PS Cuidado com o Diskpart - é poderoso e, portanto, bastante perigoso. A razão pela qual eu o usei para desmontar unidades é porque está disponível no Console de recuperação do XP e nas Opções de recuperação de sistema / prompt de comando do Vista / 7.
Karan
Tentei usar Diskpartenquanto estava no modo normal do Windows. Esta é a mensagem que recebo após executar a etapa 5 acima. "O DiskPart removeu com êxito a letra da unidade, mas seu computador precisa ser reiniciado antes que as alterações entrem em vigor. Diskpart desmontou com êxito o volume." Tentei usá-lo em uma mídia removível (cartão SD) e não em um dispositivo removível (como o leitor de cartão SD ou a unidade flash USB). O indicador LED no leitor não se apagou, mas permaneceu aceso (ou seja, parou de piscar, como ocorre ocasionalmente quando um cartão SD fica apenas nele). Então, acho que é seguro removê-lo.
Samir
3
Para desfazer o remove all dismountcomando, você deve usar o mountvolcomando Para mais informações, consulte a biblioteca Technet aqui e também aqui . Depois de usar, mountvolvocê deve reiniciar para que as alterações tenham efeito. Como alternativa, você também pode usar o Gerenciamento de disco para atribuir uma nova letra de unidade.
Samir 26/05
17

Para responder a esta pergunta ... Você não precisa de material de terceiros.

Com uma linha de comando (ou PowerShell), como posso dizer ao Windows para remover o hardware com segurança automaticamente sem a entrada do usuário?

Execute este comando: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll para exibir a caixa de diálogo Remover o hardware com segurança:

O diálogo Remover Hardware com Segurança

climenole
fonte
4
Você pode descrever o que isso faz?
Canadian Luke REINSTATE MONICA
11
lançar a remoção segura para usb
climenole
11
Ainda não precisarei clicar em algo?
Canadian Luke REINSTATE MONICA
2
Isso é muito legal, mas infelizmente para fins de automação, não é melhor do que qualquer uma das sugestões de Karan.
Synetech #
11
HotPlug.dll controle , ou seja, sem _RunDLL não funciona para mim no Vista SP2
user66001
2

Como é um dispositivo de backup, significa que é um dispositivo de armazenamento; portanto, isso pode ser feito a partir do PowerShell - basta substituir X: pela letra da unidade desejada:

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
Overmind
fonte
11
Eu vi essa solução tanto em falha de servidor quanto em fluxo de pilha , mas parece que não consigo fazê-la funcionar com meu disco rígido externo. Não há mensagem de erro, ele simplesmente não faz nada. Usar "F:"ou "F:\"não fez a diferença, assim como executar o PowerShell como administrador. A remoção segura através da barra de tarefas está funcionando. O que estou fazendo errado?
Flolilo 21/08/19
O comando PowerShell real não retorna nenhuma mensagem de erro (texto em vermelho)?
Overmind
Se eu desconectar F: \ e executar o comando, recebo um erro de que não consigo executar um método que seja NULL (a mensagem está em alemão, então não tenho certeza absoluta de que fiz a tradução correta). Se eu executar os comandos com F: \ conectado, não há mensagem alguma - também $errorestá vazio. A propósito, estou executando o PowerShell 5.1 no Win10 Pro. F: \ é um HDD USB externo que possui apenas uma partição (F :) - pode ser removido com segurança pela barra de tarefas sem problemas.
Flolilo 21/08/19
Curiosamente, quando eu uso um pendrive USB (também com uma partição), ele funciona perfeitamente. Ambos foram ativados Better performanceem sua política de remoção, embora isso não pareça fazer diferença (o pendrive USB funciona com as duas configurações, o HDD USB não). Um segundo pendrive que eu possuo também não gosta de ser ejetado pelo comando PowerShell. Trabalho: Transcend JetFlash 700 (16GB, FAT32), Não está funcionando: Seagate Expansion Portable 2015 (4TB, NTFS), Sandisk Extreme (32GB, exFAT). Todos experimentaram várias vezes na mesma porta USB. Mais uma vez, remover com segurança através do ícone da barra de tarefas sempre funciona.
Flolilo 21/08/19
@flolilolilo eu tenho o mesmo problema ...
Ploni
1

De acordo com este artigo de 7 tutoriais , você pode ativar a desconexão segura configurando "Remoção rápida". Isso desativará o cache de gravação por dispositivo , cujo impacto no desempenho é "insignificante"? Seus passos para o Windows 7 estão abaixo.

( Editar ) De acordo com este artigo da howtogeek , você ainda deve ter cuidado ao definir "Remoção rápida". Isso desabilitará o cache de gravação e, assim, evitará a maioria dos problemas. Mas alguns programas ainda podem estar escrevendo coisas 'ao vivo', até serem explicitamente excluídos / removidos. ( Fim da edição )

Passos:

  • conecte o dispositivo na unidade USB
  • abra o Gerenciador de dispositivos
  • expandir unidades de disco
  • clique com o botão direito na unidade removível, por exemplo, "USB2.0 Flash Disk USB Device".
  • selecione Propriedades
  • clique na guia Políticas
  • ative "Remoção rápida" (desative "Melhor desempenho")

( Editar ) Observe que você precisa usar o Gerenciador de dispositivos para alterar a configuração. Isso não pode ser feito no Gerenciador de arquivos. (Pelo menos na minha edição do Windows 10.)

Yahoo Serious
fonte
11
Parece uma ótima idéia para unidades de backup! Parece que esta é a configuração padrão (pelo menos na minha Seagate BUP Slim BK USB External Drive).
Arvo Bowen #
11
Os dispositivos com cache de gravação ativado não podem ser removidos rapidamente.
Overmind
11
É possível definir isso globalmente para que se aplique a todo e qualquer armazenamento USB conectado no futuro?
DuckMaestro