Usuń urządzenie USB z wiersza polecenia

61

Tworzę skrypt kopii zapasowej dla systemu Windows 7, a ostatnią czynnością, którą chcę wykonać, jest bezpieczne „usunięcie” dysku USB, na którym jest tworzona kopia zapasowa. Mam wrażenie, że podłączenie napędu do tego samego portu USB przez cały czas spowoduje zachowanie tego samego DEV_ID (popraw mnie, jeśli się mylę). W jaki sposób mogę powiedzieć systemowi Windows, aby w linii poleceń (lub PowerShell) bezpiecznie usuwał sprzęt automatycznie bez udziału użytkownika?

Świetnie byłoby też znać inne systemy operacyjne, które mogą to zrobić.

Kanadyjczyk Luke REINSTATE MONICA
źródło
5
Muszę przyznać się do rozczarowania niektórymi „odpowiedziami” poniżej, które wyraźnie nie rozumiały, o co się pyta, i zapewniły opcje, które są oczywiście bezużyteczne dla zadania automatyzacji zgodnie z zapytaniem. ಠ_ಠ
Synetech
> Mam wrażenie, że podłączenie napędu do SAMEGO portu USB przez cały czas utrzyma ten sam DEV_ID, popraw mnie, jeśli się mylę. To jest poprawne. Windows traktuje dysk i port, do którego jest podłączony, jako parę identyfikującą. Podłączając go do innego portu (w którym nigdy nie był podłączony), uruchomisz funkcję instalacji sterownika Windows. Co gorsza, jeśli do woluminu przypisano nieciągłą literę dysku, podłączenie go do nowego portu nie zachowa tej litery i otrzyma następną dostępną literę, a literę należy ponownie przypisać ręcznie.
Synetech,
1
(Co dziwne, jeśli podłączysz dysk do portu i pozwolisz, aby system Windows zainstalował dla niego sterowniki, a następnie przypiszesz do niego kolejną literę dysku, a następnie odłączysz wtyczkę do innego napędu tej samej marki, modelu, i rozmiar, system Windows potraktuje to dokładnie tak, jakbyś ponownie podłączyć poprzedni dysk.)
Synetech
Czy możesz zaktualizować tytuł, aby był poprawny? Szukałem odpowiedzi na temat usuwania „urządzeń” USB, a nie „napędów” USB.

Odpowiedzi:

32

RemoveDrive dobrze mi kiedyś służył

stijn
źródło
4
removerive \ x64> RemoveDrive.exe f: -L to kod dla tych, którzy się spieszą
fedmich
Skończyło się to dla mnie. Co ciekawe, WqlEventQuery, które podłączyłem, wciąż czeka na ostrzał, dopóki fizycznie nie wyciągniesz napędu. Nie znam się na tym, ale to mnie zaskoczyło. W tym przypadku nie stanowi to dla mnie problemu.
samuelesque,
1
RemoveDrive jest dobry, ale problem polega na tym, że faktycznie usuwa cały dysk. W przypadku czytników kart zamiast po prostu wysunąć kartę (jak kliknięcie prawym przyciskiem myszy i wybranie opcji Wysuń z mojego komputera) i umożliwienie podłączenia innej karty, usuwa cały czytnik kart, wymagając fizycznego odłączenia i ponownego podłączony lub gorzej, restartuje się, jeśli czytnik kart jest wbudowany (można to zrobić za pomocą oprogramowania, ale jest denerwujący).
Synetech
Możesz uruchomić go również z cygwina.
Kevin Sadler
65

Oprócz wspomnianego w drugiej odpowiedzi narzędzia RemoveDrive firmy Uwe Sieber , istnieje wiele narzędzi, które mogą to osiągnąć. Oto krótka lista:

  • USB Disk Ejector jest przede wszystkim narzędziem opartym na graficznym interfejsie użytkownika, ale można go równie dobrze używać z wiersza poleceń, aby wysunąć dysk, z którego działa program, lub dowolny dysk, określając literę dysku / (częściową) nazwę dysku / punkt montowania itp. Darmowe i otwarte oprogramowanie.

    Wyrzutnik dysku USB

  • Bezpieczne usuwanie USB nie jest darmowe, ale jest narzędziem do usuwania dysku na sterydach, z wieloma zaawansowanymi funkcjami , w tym oczywiście obsługą wiersza poleceń . Zentimo jest jego większym bratem, który ma jeszcze więcej funkcji .

    Bezpieczne usuwanie USB

  • DevCon firmy Microsoft to wersja Menedżera urządzeń w wierszu polecenia. Oprócz oryginalnej wersji ery Win2K / XP dostępnej na stronie KB, dostępne są nowsze wersje (zarówno 32-, jak i 64-bitowe) z różnych źródeł MS, jak wspomniano w tym artykule Gdzie znaleźć DevCon.exe . DevCon.exe dla systemu Windows 7 (i prawdopodobnie również Windows 8) można znaleźć w odpowiednim zestawie sterowników systemu Windows (WDK) , jak wspomniano w tym wątku (który zawiera również łącza pobierania do wyodrębnionego pliku wykonywalnego ).

    devcon status *lub devcon hwids *lub devcon findall =usb(w przypadku bardziej zwartej listy) powinien podać identyfikator sprzętowy urządzenia. Na przykład:

    USB \ VID_0781 & PID_7113 \ 0001162825
    Nazwa:
    Sterownik urządzenia pamięci masowej USB działa.

    Następnie możesz spróbować usunąć urządzenie za pomocą devcon remove "USB\VID_0781&PID_7113"(dozwolone są symbole wieloznaczne, takie jak *, ale bądź ostrożny, bo możesz w końcu usunąć coś zupełnie innego!)


Ktoś zapytał: „ Czy istnieje polecenie DOS (cmd.exe z Win7), aby wysunąć napęd z kciuka? ”, Który został niestety zamknięty jako duplikat tego wątku. Pytanie dotyczyło jednak wysuwania dysków USB w konsoli odzyskiwania systemu Windows / wierszu polecenia odzyskiwania systemu , więc jest mało prawdopodobne, aby którekolwiek z powyższych narzędzi pomogło. W takiej sytuacji powinna działać następująca metoda wykorzystująca Diskpart :

  1. Wpisz diskparti poczekaj na monit diskpart ( DISKPART>)

  2. Rodzaj list volume

  3. Zanotuj ostrożnie numer woluminu napędu USB (w celu uzyskania pomocy użyj wymienionych właściwości, takich jak litera napędu, etykieta, typ i rozmiar)

  4. Wpisz select volume <number>, gdzie <number>jest numer woluminu wymieniony powyżej

    Diskpart

  5. Rodzaj remove all dismount

  6. Wpisz, exitaby wyjść z Diskpart

Teraz powinieneś być w stanie bezpiecznie usunąć dysk USB bez obawy o utratę danych.

Karan
źródło
1
Dziękujemy za poświęcenie czasu na odpowiedź na moje pytanie, nawet po tym, jak SU je zamknęło. Poszedłem dalej i działałem zgodnie z sugestią Jareda Tritscha i usunąłem napęd, po prostu go usuwając. Kiedy znów uruchomię laptopa, eksperymentuję z DISKPART. Oto link do specyfikacji Microsoft dla DISKPART. technet.microsoft.com/en-us/library/bb490893.aspx
zundarz
2
@zundarz: Nie ma za co! Domyślną zasadą usuwania w systemie Windows dla urządzeń wymiennych jest Szybkie usuwanie , która wyłącza buforowanie zapisu i pozwala usunąć dysk bez konieczności wcześniejszego bezpiecznego jego usunięcia. Zobacz ten zrzut ekranu, aby uzyskać więcej. Dlatego sugestia Jareda dotycząca szarpania dysku nie powinna zwykle powodować utraty danych, jeśli dyski wymienne są traktowane w ten sam sposób również w Konsoli odzyskiwania. Jednak dla spokoju zawsze staram się bezpiecznie usunąć każdy dysk przed jego wyciągnięciem. Może być placebo, ale powstrzymuje mnie od zmartwień. :)
Karan
PS Uważaj na Diskpart - jest potężny i dlatego dość niebezpieczny. Powodem, dla którego użyłem go do demontażu dysku, jest to, że jest on dostępny zarówno z konsoli odzyskiwania XP, jak i opcji odzyskiwania systemu / wiersza polecenia systemu Vista / 7.
Karan
Próbowałem użyć Diskpartw normalnym trybie Windows. Taką wiadomość otrzymuję po wykonaniu kroku 5 powyżej. „Program DiskPart pomyślnie usunął literę dysku, ale komputer musi zostać ponownie uruchomiony przed wprowadzeniem zmian. Diskpart pomyślnie odinstalował wolumin”. Próbowałem użyć go na nośniku wymiennym (karcie SD), a nie na urządzeniu wymiennym (takim jak czytnik kart SD lub dysk flash USB). Wskaźnik LED na czytniku nie zgasł, ale pozostał zapalony (tzn. Przestał migać, co czasami się zdarza, gdy karta SD tylko w nim siedzi). Myślę więc, że można go bezpiecznie usunąć.
Samir,
3
Aby cofnąć się remove all dismountkomendy należy użyć mountvolkomendy. Aby uzyskać więcej informacji, zobacz bibliotekę Technet tutaj i również tutaj . Po użyciu mountvolmusisz ponownie uruchomić komputer, aby zmiany odniosły skutek. Alternatywnie można również użyć narzędzia Zarządzanie dyskami, aby przypisać nową literę dysku.
Samir
17

Aby odpowiedzieć na to pytanie ... Nie potrzebujesz materiałów stron trzecich.

W przypadku wiersza poleceń (lub programu PowerShell), jak mogę powiedzieć systemowi Windows, aby automatycznie usuwał sprzęt automatycznie bez udziału użytkownika?

Uruchom to polecenie: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll aby wyświetlić okno dialogowe Bezpieczne usuwanie sprzętu:

Okno dialogowe Bezpieczne usuwanie sprzętu

klimenol
źródło
4
Czy możesz opisać, co to robi?
Kanadyjczyk Luke REINSTATE MONICA
1
uruchom bezpieczne usuwanie dla USB
climenole
11
Czy nadal nie będę musiał klikać czegoś?
Kanadyjczyk Luke REINSTATE MONICA,
2
Jest to całkiem fajne, ale niestety dla celów automatyzacji nie jest lepsze niż jakakolwiek sugestia Karana.
Synetech
1
kontrola hotplug.dll , tj. bez _RunDLL nie działa dla mnie w
systemie
2

Ponieważ jest to urządzenie kopii zapasowej, oznacza to, że jest to urządzenie pamięci masowej, dlatego można to zrobić z poziomu PowerShell - wystarczy zastąpić X: żądaną literą dysku:

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
Overmind
źródło
1
Widziałem to rozwiązanie zarówno w przypadku awarii serwera, jak i przepełnienia stosu , ale wydaje mi się, że nie mogę go uruchomić z zewnętrznym dyskiem twardym. Nie ma komunikatu o błędzie, po prostu nic nie robi. Używanie "F:"lub "F:\"nie robiło różnicy, podobnie jak uruchamianie PowerShell jako administrator. Działa bezpieczne usuwanie za pomocą paska zadań. Co ja robię źle?
flolilo
Rzeczywiste polecenie programu PowerShell nie zwraca żadnego komunikatu o błędzie (czerwony tekst)?
Overmind,
Jeśli odłączę F: \ i uruchomię polecenie, pojawia się błąd, że nie mogę uruchomić metody NULL (wiadomość jest w języku niemieckim, więc nie jestem całkowicie pewien, czy tłumaczenie zostało poprawnie wykonane). Jeśli uruchomię polecenia z podłączonym F: \, nie będzie w ogóle żadnego komunikatu - też $errorbędzie pusty. Nawiasem mówiąc, używam PowerShell 5.1 na Win10 Pro. F: \ to zewnętrzny dysk twardy USB, który ma tylko jedną partycję (F :) - bez problemu można go bezpiecznie usunąć za pomocą paska zadań.
flolilo
Co ciekawe, kiedy używam pendrive USB (również z jedną partycją), działa bezbłędnie. Oba mają włączone Better performancew swoich zasadach usuwania, choć wydaje się, że to nie robi żadnej różnicy (pendrive USB działa z oboma ustawieniami, dysk twardy USB nie działa). Drugi pendrive, którego posiadam, również nie lubi być wysuwany za pomocą polecenia PowerShell. Działa: Transcend JetFlash 700 (16 GB, FAT32), nie działa: Seagate Expansion Portable 2015 (4 TB, NTFS), Sandisk Extreme (32 GB, exFAT). Wszystkie wypróbowano wiele razy na tym samym porcie USB. Ponownie bezpieczne usuwanie za pomocą ikony paska zadań zawsze działa.
flolilo
@flolilolilo mam ten sam problem ...
Ploni
1

Zgodnie z tym artykułem 7 samouczków możesz włączyć bezpieczne odłączanie, ustawiając opcję „Szybkie usuwanie”. Spowoduje to wyłączenie buforowania zapisu dla każdego urządzenia , którego wpływ na wydajność jest „znikomy”? Ich kroki dla Windows 7 są poniżej.

( Edytuj ) Zgodnie z tym artykułem Howtogeek , należy zachować ostrożność podczas ustawiania opcji „Szybkie usuwanie”. Spowoduje to wyłączenie buforowania zapisu, a tym samym zapobiegnie większości problemów. Ale niektóre programy mogą nadal pisać rzeczy „na żywo”, dopóki nie zostaną wyraźnie usunięte / usunięte. ( Koniec edycji )

Kroki:

  • podłącz urządzenie do napędu USB
  • otwórz Menedżera urządzeń
  • rozwiń Napędy dyskowe
  • kliknij prawym przyciskiem myszy dysk wymienny, np. „USB2.0 Flash Disk USB Device”.
  • wybierz Właściwości
  • kliknij kartę Zasady
  • włącz „Szybkie usuwanie” (wyłącz „Lepszą wydajność”)

( Edytuj ) Pamiętaj, że musisz zmienić ustawienia w Menedżerze urządzeń, nie można tego zrobić w Eksploratorze plików. (Przynajmniej w mojej wersji Windows 10).

Poważnie
źródło
1
To brzmi jak świetny pomysł na dyski zapasowe! Wygląda na to, że jest to ustawienie domyślne (przynajmniej na moim Seagate BUP Slim BK USB External Drive).
Arvo Bowen,
1
Urządzenia z włączoną pamięcią podręczną zapisu nie można szybko usunąć.
Overmind
1
Czy można to ustawić globalnie, tak aby dotyczyło dowolnej pamięci USB podłączonej w przyszłości?
DuckMaestro,