RemoveDrive me serviu bem no passado
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 que está fazendo backup. Tenho a impressão de que ligar a unidade à mesma porta USB o tempo todo manterá o mesmo DEV_ID (corrija-me se estiver errado). Com uma linha de comando (ou PowerShell), como posso dizer ao Windows para remover com segurança o hardware automaticamente sem a entrada do usuário?
Assim como um espaço reservado, outros sistemas operacionais que possam ter uma maneira de fazer isso seria ótimo saber também.
RemoveDrive me serviu bem no passado
Além do RemoveDrive de Uwe Sieber mencionado na outra resposta, há um todo monte de utilitários que podem fazer isso. Uma pequena lista segue:
O USB Disk Ejector é basicamente um utilitário baseado em GUI, mas pode ser usado igualmente bem a partir da linha de comando para ejetar a unidade que o programa está sendo executado, ou qualquer unidade, especificando a letra da unidade / (parcial) o nome da unidade / ponto de montagem etc. Fonte livre e aberta.
O
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&PID_7113%bl0ck_qu0te%01162825
Name: USB Mass Storage Device
Driver is running.
Você pode então tentar remover o dispositivo com devcon remove "USB\VID_0781&PID_7113"
(curingas como * são permitidas, mas tenha cuidado ou você pode acabar removendo algo completamente diferente!)
Alguém perguntou " Existe um prompt do DOS (cmd.exe do Win7) para ejetar um pen drive? " que infelizmente foi fechado como uma duplicata deste segmento. No entanto, a questão era sobre a ejeção de drives USB, enquanto no Console de Recuperação do Windows / Prompt de Comando de Recuperação do Sistema , portanto, é improvável que qualquer um dos utilitários acima ajude. Nessa situação, o seguinte método que usa o Diskpart deve funcionar:
Digite diskpart
e aguarde o prompt do diskpart ( DISKPART>
)
Digite list volume
Anote o número do volume da unidade USB com cuidado (use as propriedades listadas, como letra de unidade, etiqueta, tipo e tamanho, para obter ajuda)
Digite select volume <number>
, em que <number>
é o número do volume indicado acima
Digite remove all dismount
Digite exit
para sair do Diskpart
Agora, você poderá remover seu pendrive com segurança sem medo de perda de dados.
Para responder a esta questão ... Você não precisa de material de terceiros.
With a Command Line (or PowerShell), how can I tell Windows to safely remove the hardware automatically without user input?
Execute este comando: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll
para abrir a caixa de diálogo Remover hardware com segurança:
Como é um dispositivo de backup, significa que é um dispositivo de armazenamento, portanto, pode ser feito a partir do powershell - basta substituir X: pela letra de unidade desejada:
$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
De acordo com este artigo dos 7tutorials , 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 this howtogeek-article , você ainda deve ter cuidado ao definir "Remoção rápida". Isso desativará o cache de gravação e evitará a maioria dos problemas. Mas alguns programas ainda podem estar escrevendo coisas ao vivo, até serem explicitamente ejetadas / removidas. ( Fim da edição )
Etapas:
( 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).