Видаліть 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, який я підключив, все ще чекає стріляти, поки ви фізично не витягнете привід. Не знаю тонко про цей матеріал, але мене це здивувало. У цьому випадку для мене це не буде проблемою.
samuelesque

1
RemoveDrive - це добре, але проблема полягає в тому, що він фактично видаляє весь диск. Для читачів карт замість того, щоб просто вийняти карту (наприклад, клацнути правою кнопкою миші та вибрати Витягнути з "Мій комп'ютер") і дозволити вам підключити інший, він видаляє весь зчитувач карт, вимагаючи відключити його фізично та відключити повторно. підключено, або ще гірше, перезавантажтесь, якщо вбудований картридер (це можна зробити за допомогою програмного забезпечення, але це дратує).
Synetech

Ви також можете запустити його від cygwin.
Кевін Садлер

65

Окрім RemoveDrive Uwe Sieber, який згадується в іншій відповіді, існує ціла купа утиліт, які можуть цього досягти. З невеликого списку випливає:

  • USB Disk Ejector - це насамперед утиліта, заснована на графічному інтерфейсі, але його можна однаково добре використовувати з командного рядка для витягування диска, з якого запущена програма, або будь-якого диска, вказавши літеру / (часткове) ім'я / місце приводу тощо. Безкоштовно та з відкритим кодом.

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

  • USB Safely Remove не є безкоштовним, але це утиліта для видалення диска на стероїдах, з великою кількістю вдосконалених функцій , включаючи підтримку звичайного командного рядка . Зентимо - її старший брат, з ще більшими рисами .

    Безпечне видалення USB

  • Microsoft DevCon - це версія командного рядка Диспетчера пристроїв. Крім оригінальної версії епохи Win2K / 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 Mass Storage .

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


Хтось запитав: " Чи існує команда DOS (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 System Recovery Options / Command Prompt.
Каран

Я намагався використовуватись 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 щоб відкрити діалогове вікно Безпечне видалення обладнання:

Діалог безпечного видалення обладнання


4
Чи можете ви описати, що це робить?
Канадський Люк ВІДНОВЛЕННЯ МОНИЦИ

1
запустити безпечне видалення для usb
climenole

11
Невже мені все-таки потрібно щось натиснути?
Канадський Люк ВІДНОВЛЕНО МОНИЦА

2
Це досить круто, але, на жаль, для автоматизації це не краще, ніж будь-яка пропозиція Карана.
Synetech

1
управління hotplug.dll , тобто без _RunDLL не працює для мене на Vista SP2
user66001

2

Оскільки це резервний пристрій, це означає, що це запам'ятовуючий пристрій, тому це можна зробити з powerhell - просто замініть X: на потрібну літеру диска:

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

1
Я бачив це рішення на ServerFault , а також на StackOverflow , але я , здається, не в змозі змусити його працювати з моїм зовнішнім жорстким диском. Немає повідомлення про помилку, воно просто нічого не робить. Використання "F:"або "F:\"не змінило значення, як і PowerShell як адміністратор. Безпечне видалення за допомогою панелі завдань працює. Що я роблю неправильно?
flolilo

Фактична команда повноважень не повертає жодного повідомлення про помилку (червоний текст)?
Перемогти

Якщо я відключу F: \ і запускаю команду, я отримую помилку, що я не можу запустити метод NULL (повідомлення є німецькою мовою, тому я не зовсім впевнений, що я отримав право перекладу). Якщо я запускаю команди з підключеним F: \, повідомлення взагалі немає - $errorтакож порожнє. До речі, я запускаю PowerShell 5.1 на Win10 Pro. F: \ - це зовнішній жорсткий диск USB, який має лише один розділ (F :) - його можна безпечно видалити через панель завдань без проблем.
flolilo

Цікаво, що коли я використовую USB-pendrive (також з одним розділом), він працює бездоганно. Обидва вони включили Better performanceв політику їх видалення, хоча це, мабуть, не має ніякого значення (USB pendrive працює з обома налаштуваннями, USB HDD не використовує). Другий маятник, який я маю, також не любить викидати за допомогою команди PowerShell. Працює: Transcend JetFlash 700 (16 ГБ, FAT32), не працює: Seagate Expansion Portable 2015 (4 ТБ, NTFS), Sandisk Extreme (32 ГБ, exFAT). Усі випробувані кілька разів на одному USB-порті. Знову ж таки, безпечне видалення за допомогою панелі завдань завжди працює.
flolilo

@flolilolilo У мене така ж проблема ...
Плоні

1

Відповідно до цієї статті 7 , можна ввімкнути безпечне відключення, встановивши "Швидке видалення". Це дозволить відключити кешування запису на одному пристрої , з яких вплив на продуктивність "незначний"? Їх кроки для Windows 7 нижче.

( Редагувати ) Згідно з цією статтею howtogeek , ви все ж повинні бути обережними, встановлюючи "Швидке видалення". Це відключить кешування записів і, таким чином, запобіжить більшості проблем. Але деякі програми все-таки можуть писати матеріали "наживо", поки явно не вилучено / видалено. ( Кінець редагування )

Кроки:

  • підключіть пристрій до USB-накопичувача
  • відкрити Диспетчер пристроїв
  • розгорніть дискові диски
  • клацніть правою кнопкою миші свій знімний диск, наприклад, "USB-пристрій USB2.0 Flash Disk."
  • виберіть Властивості
  • перейдіть на вкладку Політика
  • увімкніть "Швидке видалення" (вимкніть "Краща продуктивність")

( Редагувати ) Зауважте, що вам потрібно використовувати Диспетчер пристроїв для зміни налаштувань, це не можна зробити з Провідника файлів. (Принаймні, у моїй версії Windows 10.)


1
Це звучить як відмінна ідея для резервних дисків! Здається, це налаштування за замовчуванням, хоча (принаймні, на моєму Seagate BUP Slim BK USB External Drive).
Арво Боуен

1
Пристрої з увімкненим кешем запису не швидко знімаються.
Перемогти

1
Чи можна встановити це в глобальному масштабі так, щоб воно застосовувалося до будь-якого USB-накопичувача, який надалі додається?
DuckMaestro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.