Удалить USB-устройство из командной строки

61

Я создаю сценарий резервного копирования для Windows 7, и последнее действие, которое я хочу выполнить, - это безопасно «извлечь» USB-накопитель, на который он выполняет резервное копирование. У меня сложилось впечатление, что при постоянном подключении накопителя к одному и тому же порту USB будет сохраняться один и тот же DEV_ID (поправьте меня, если я ошибаюсь). С помощью командной строки (или PowerShell), как я могу сказать Windows, чтобы безопасно удалить оборудование автоматически без участия пользователя?

Точно так же было бы полезно знать о других ОС, у которых есть способ сделать это.

Канадский Люк ВОССТАНОВИТЬ МОНИКУ
источник
5
Я должен признать разочарование некоторыми «ответами», приведенными ниже, которые явно не понимают, о чем идет речь, и предоставили варианты, которые явно бесполезны для задачи автоматизации, как об этом просили. ಠ_ಠ
Synetech
> У меня сложилось впечатление, что при подключении накопителя к ОДНОМУ USB-порту все время будет сохраняться один и тот же DEV_ID, поправьте меня, если я ошибаюсь. Это верно. Windows рассматривает диск и порт, к которому он подключен, как идентифицирующую пару. Подключив его к другому порту (к которому он никогда не подключался), вы активируете функцию установки драйверов Windows. Хуже того, если вы присвоили тому непоследовательную букву диска, то при подключении его к новому порту эта буква не будет сохранена, и она получит следующую доступную букву, и вам придется снова назначать букву вручную.
Synetech
1
(Как ни странно, если вы подключаете диск к порту и позволяете Windows установить для него драйверы, затем назначаете непоследовательную букву диска, а затем отключаете его от вилки другого диска той же марки, модели, и размер, то Windows будет обрабатывать его точно так же, как если бы вы снова подключили предыдущий диск.)
Synetech
Не могли бы вы обновить название, чтобы быть правильным. Я искал ответы на удаление USB-устройств, а не USB-накопителей.

Ответы:

32

RemoveDrive хорошо послужил мне в прошлом

Стейн
источник
4
removerive \ x64> RemoveDrive.exe f: -L - код, для тех, кто спешит
fedmich
Это сработало для меня. Интересно, что WqlEventQuery, который я подключил, все еще ждет срабатывания, пока вы физически не извлечете диск. Не знаю об этом, но это меня удивило. Не бывает проблемой для меня в этом случае.
Самуэльский
1
RemoveDrive - это хорошо, но проблема в том, что он фактически удаляет весь диск. Для карт-ридеров вместо простого извлечения карты (например, щелчка правой кнопкой мыши и выбора «Извлечь из моего компьютера») и предоставления возможности подключить другое устройство, он удаляет весь карт-ридер, требуя его физического отключения и повторного подключения. подключен или, что еще хуже, перезагружается, если устройство чтения карт памяти встроено (это можно сделать с помощью программного обеспечения, но это раздражает).
Synetech
Вы также можете запустить его из Cygwin.
Кевин Садлер
65

Помимо RemoveDrive Уве Зибера, упомянутого в другом ответе, существует целый ряд утилит, которые могут это сделать. Вот небольшой список:

  • USB Disk Ejector - это, прежде всего, утилита на основе графического интерфейса, но она может использоваться с равной эффективностью из командной строки для извлечения диска, с которого запускается программа, или любого диска, указав букву диска / (частичное) имя диска / точку монтирования и т. Д. Бесплатный и открытый исходный код.

    USB дисковый эжектор

  • USB Safely Remove не является бесплатной, но это утилита для удаления дисков на стероидах, с множеством расширенных функций , включая, конечно, поддержку командной строки . Zentimo - его старший брат, с еще большим количеством функций .

    USB безопасно удалить

  • Microsoft DevCon - это версия диспетчера устройств для командной строки. Помимо исходной версии эпохи Windows 2000 / XP, доступной на странице KB, существуют новые версии (как 32-разрядные, так и 64-разрядные), доступные из различных источников MS, как упомянуто в этой статье « Где найти DevCon.exe» . DevCon.exe для Windows 7 (и, возможно, также для Windows 8) находится в соответствующем наборе драйверов Windows (WDK) , как указано в этой теме (который также содержит ссылки для загрузки извлеченного исполняемого файла ).

    devcon status *или devcon hwids *или devcon findall =usb(для более компактного списка) следует указать аппаратный идентификатор устройства. Например:

    USB \ VID_0781 & PID_7113 \ 0001162825
    Имя:
    Драйвер запоминающего устройства USB работает.

    Затем вы можете попробовать удалить устройство с помощью devcon remove "USB\VID_0781&PID_7113"(подстановочные знаки, такие как *, разрешены, но будьте осторожны, иначе вы можете полностью удалить что-то еще!)


Кто-то спросил: « Существует ли команда DOS prompt (cmd.exe из Win7) для извлечения флэш-диска? », Которая, к сожалению, была закрыта как дубликат этого потока. Однако вопрос был об извлечении USB-накопителей во время работы в консоли восстановления Windows / командной строке восстановления системы , поэтому вряд ли какая-либо из приведенных выше утилит поможет. В такой ситуации должен работать следующий метод с использованием Diskpart :

  1. Введите diskpartи дождитесь приглашения diskpart ( DISKPART>)

  2. Тип list volume

  3. Внимательно запишите номер тома USB-накопителя (для справки используйте перечисленные свойства, такие как буква диска, метка, тип и размер)

  4. Тип select volume <number>, где <number>указан номер тома, указанный выше

    Diskpart

  5. Тип remove all dismount

  6. Введите, exitчтобы выйти из Diskpart

Теперь вы сможете безопасно удалить USB-накопитель, не опасаясь потери данных.

Каран
источник
1
Спасибо, что нашли время ответить на мой вопрос даже после того, как SU закрыл его. Я пошел дальше и действовал по предложению Джареда Трича и удалил диск, просто удалив его. Когда я снова включу ноутбук, я поэкспериментирую с DISKPART. Вот ссылка на спецификации Microsoft для DISKPART. technet.microsoft.com/en-us/library/bb490893.aspx
zundarz
2
@zundarz: Всегда пожалуйста! Политика удаления по умолчанию в Windows для съемных устройств - « Быстрое удаление» , которая отключает кэширование записи и позволяет извлекать диск без необходимости его безопасного удаления. Смотрите этот скриншот для более. Таким образом, предложение Джареда о срыве диска обычно не должно приводить к потере данных, если съемные диски также обрабатываются в консоли восстановления также. Тем не менее, для душевного спокойствия я всегда стараюсь безопасно извлекать каждый диск перед его извлечением. Может быть плацебо, но мешает мне беспокоиться. :)
Каран
PS Будьте осторожны с Diskpart - он мощный и, следовательно, довольно опасный. Причина, по которой я использовал его для размонтирования диска, заключается в том, что он доступен как в консоли восстановления XP, так и в параметрах восстановления командной строки Vista / 7 / командной строке.
Каран
Я пытался использовать в Diskpartто время как в обычном режиме Windows. Это сообщение я получаю после выполнения шага 5 выше. «DiskPart успешно удалил букву диска, но перед вступлением изменений в силу необходимо перезагрузить компьютер. Diskpart успешно отключил том». Я пытался использовать его на съемном носителе (SD-карте), а не на съемном устройстве (например, устройстве чтения SD-карт или USB-накопителе). Светодиодный индикатор на считывателе не погас, но он продолжал гореть (т.е. он перестал мигать, как это иногда случается, когда SD-карта находится только в нем). Так что я думаю, что это безопасно удалить тогда.
Самир
3
Чтобы отменить в remove all dismountкоманду , которую вы должны использовать mountvolкоманду. Для получения дополнительной информации см. Библиотеку Technet здесь, а также здесь . После того, как вы использовали, mountvolвы должны перезагрузиться, чтобы изменения вступили в силу. Кроме того, вы также можете использовать Управление дисками, чтобы назначить новую букву диска.
Самир
17

Чтобы ответить на этот вопрос ... Вам не нужны сторонние вещи.

С помощью командной строки (или PowerShell), как я могу сказать Windows, чтобы безопасно удалить оборудование автоматически без участия пользователя?

Выполните эту команду: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll для вызова диалогового окна «Безопасное извлечение устройства»:

Диалоговое окно «Безопасное извлечение устройства»

climenole
источник
4
Можете ли вы описать, что это делает?
Канадский Люк ВОССТАНОВИТЕ МОНИКУ
1
запустите безопасное удаление для usb
climenole
11
Разве мне не нужно будет что-то нажимать тогда?
Канадский Люк ВОССТАНОВИТЕ МОНИКУ
2
Это довольно круто, но, к сожалению, для целей автоматизации это не лучше, чем любое из предложений Карана.
Synetech
1
control hotplug.dll , т. е. без _RunDLL у меня не работает на Vista SP2
user66001
2

Поскольку это устройство резервного копирования, это означает, что это устройство хранения, поэтому это можно сделать из powershell - просто замените X: на желаемую букву диска:

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
Сверхразум
источник
1
Я видел это решение на ServerFault , а также на StackOverflow , но я , кажется, не в состоянии заставить его работать с моим внешним жестким диском. Там нет сообщения об ошибке, он просто ничего не делает. Использование "F:"или "F:\"не имеет значения, как и при запуске PowerShell от имени администратора. Безопасное удаление через панель задач работает. Что я делаю неправильно?
flolilo
Фактическая команда powershell не возвращает никакого сообщения об ошибке (красный текст)?
Сверхразум
Если я отключаю F: \ и запускаю команду, я получаю сообщение об ошибке, что я не могу запустить метод, имеющий значение NULL (сообщение на немецком языке, поэтому я не совсем уверен, что я правильно понял перевод). Если я запускаю команды с подключенным F: \, сообщения вообще нет - $errorтоже пусто. Кстати, я использую PowerShell 5.1 на Win10 Pro. F: \ - это внешний USB HDD, имеющий только один раздел (F :) - его можно безопасно удалить с помощью панели задач.
flolilo
Интересно, что когда я использую USB-pendrive (тоже с одним разделом), он работает без нареканий. Оба включили Better performanceв своей политике удаления, хотя это, кажется, не имеет никакого значения (USB Pendrive работает с обоими параметрами, USB HDD - нет). Второй pendrive, которым я владею, также не любит, когда его извлекают с помощью команды PowerShell. Работает: Transcend JetFlash 700 (16 ГБ, FAT32), Не работает: Seagate Expansion Portable 2015 (4 ТБ, NTFS), Sandisk Extreme (32 ГБ, exFAT). Все опробовали несколько раз на одном USB-порту. Опять же, безопасное удаление с помощью панели задач-значок всегда работает.
flolilo
@flolilolilo У меня такая же проблема ...
Ploni
1

Согласно этой статье-учебникам , вы можете включить безопасное отключение, установив «Быстрое удаление». Это отключит кеширование записи для каждого устройства , влияние на производительность которого «незначительно»? Их шаги для Windows 7 ниже.

( Правка ) Согласно этой статье , вы должны быть осторожны при установке «Быстрое удаление». Это отключит кэширование записи и, таким образом, предотвратит большинство проблем. Но некоторые программы могут по-прежнему писать материал «вживую», пока он не будет извлечен / удален. ( Конец редактирования )

шаги:

  • подключите устройство к USB-накопителю
  • открыть диспетчер устройств
  • расширить дисководы
  • щелкните правой кнопкой мыши на съемном диске, например, «USB2.0 Flash Disk USB Device».
  • выберите Свойства
  • щелкните вкладку Policies
  • включить «Быстрое удаление» (отключить «Лучшая производительность»)

( Изменить ) Обратите внимание, что вам нужно использовать диспетчер устройств, чтобы изменить настройки, это не может быть сделано из проводника. (По крайней мере, в моем выпуске Windows 10.)

Серьезный Yahoo
источник
1
Это звучит как отличная идея для резервного копирования дисков! Похоже, что это настройка по умолчанию (по крайней мере, на моем Seagate BUP Slim BK USB External Drive).
Арво Боуэн
1
Устройства с включенным кэшем записи не могут быть быстро удалены.
Сверхразум
1
Можно ли настроить это глобально, чтобы оно распространялось на любое USB-хранилище, которое будет подключено в будущем?
DuckMaestro