从命令行删除USB设备


61

我正在为Windows 7构建备份脚本,而我希望它执行的最后一个操作是安全地“删除”要备份的USB驱动器。我的印象是,始终将驱动器插入相同的 USB端口将保持相同的DEV_ID(如果我输入错了,请纠正我)。使用命令行(或PowerShell),如何告诉Windows在没有用户输入的情况下自动安全地删除硬件?

就像一个占位符一样,其他可能有办法做到这一点的OS也将很高兴知道。


5
我有一些“答案”下面这显然没有明白什么是被要求,并规定显然是无用的自动化任务,asked.`ಠ_ಠ选项承认失望
Synetech

>我的印象是,始终将驱动器插入SAME USB端口将保持相同的DEV_ID,如果我错了,请纠正我。那是对的。Windows将驱动器及其插入的端口视为标识对。通过将其插入另一个端口(从未插入过该端口),将触发Windows的驱动程序安装功能。更糟糕的是,如果您已为该卷分配了一个非连续的驱动器盘符,那么将其插入新端口将不会保留该盘符,并且它将获得下一个可用的盘符,并且您必须再次手动分配一个盘符。
Synetech

1
(奇怪的是,如果您将驱动器插入端口并让Windows为它安装驱动程序,然后为其分配一个非连续的驱动器字母,然后将其拔出插头,则插入具有相同品牌,型号的其他驱动器中,和大小,然后Windows会像对待您再次插入以前的驱动器一样对待它。)
Synetech 2013年

您能否将标题更新为正确的。我一直在寻找有关删除USB“设备”而非USB“驱动器”的答案。

Answers:


32

过去,RemoveDrive对我的服务很好


4
removedrive \ x64> RemoveDrive.exe f:-L是代码,适合那些急忙的人
fedmich 2014年

最终为我工作。有趣的是,我连接的WqlEventQuery仍然等待启动,直到您将驱动器物理拉出为止。对这些东西一无所知,但这让我感到惊讶。在这种情况下,这对我来说不是问题。
samuelesque,2015年

1
RemoveDrive很好,但是问题在于它实际上删除了整个驱动器。对于读卡器,不是简单地弹出卡(如右键单击并从“我的电脑”中选择“弹出”),然后允许您插入另一个卡,它会删除整个读卡器,要求将其物理拔出并重新安装。如果内置读卡器,则插上插头,或者更糟糕的是,重新启动(可以通过软件来完成,但很烦人)。
Synetech '16

您也可以从cygwin运行它。
凯文·萨德勒

65

除了另一个答案中提到的Uwe Sieber的RemoveDrive之外,还有一大堆实用程序可以完成此任务。以下是一个小清单:

  • USB Disk Ejector主要是基于GUI的实用程序,但是可以通过在命令行中使用同样的方式来弹出运行程序的驱动器,或者通过指定驱动器号/(部分)驱动器名称/安装点等来弹出任何驱动器。免费和开源。

    USB磁盘弹出器

  • USB安全删除不是免费的,但它是类固醇上的磁盘删除实用程序,具有许多高级功能,当然包括命令行支持Zentimo是大哥哥,有甚至 更多 的功能

    USB安全移除

  • 微软自己的DevCon是设备管理器的命令行版本。除了可从KB页面获得的原始Win2K / XP时代版本以外,还有各种MS来源提供的较新版本(32位和64位),如“在哪里可以找到DevCon.exe”文章中所述。如该线程中所述,可以在相应的Windows Driver Kit(WDK)中找到适用于Windows 7(可能还有Windows 8)的DevCon.exe(该线程还包含指向提取的可执行文件的下载链接)。

    devcon status *devcon hwids *devcon findall =usb(对于更紧凑的列表)应该告诉您设备的硬件ID。例如:

    USB \ VID_0781&PID_7113 \ 0001162825
    名称:USB Mass Storage Device
    Driver正在运行。

    然后,您可以尝试使用删除设备devcon remove "USB\VID_0781&PID_7113"(允许使用*等通配符,但请小心,否则可能会完全删除其他内容!)


有人问“ 是否有DOS提示符(Win7中的cmd.exe)命令弹出一个拇指驱动器? ”,不幸的是,该命令已关闭,作为此线程的副本。但是,问题是有关在Windows恢复控制台 / 系统恢复命令提示符下弹出USB驱动器的,因此上述任何实用程序都不太可能提供帮助。在这种情况下,使用Diskpart的以下方法应该可以工作:

  1. 输入diskpart并等待diskpart提示符(DISKPART>

  2. 类型 list volume

  3. 仔细记下USB驱动器的卷号(使用驱动器号,标签,类型和大小等列出的属性来寻求帮助)

  4. 输入select volume <number>,其中<number>上述的卷号在哪里

    磁盘部分

  5. 类型 remove all dismount

  6. 键入exit以退出Diskpart

现在,您应该可以安全地卸下USB驱动器,而不必担心数据丢失。


1
感谢您抽出宝贵的时间即使在SU关闭后也回答了我的问题。我继续按照Jared Tritsch的建议行事,仅通过删除驱动器就将其删除。一旦笔记本电脑再次运行,我将使用DISKPART进行实验。这是Microsoft DISKPART规范的链接。technet.microsoft.com/zh-CN/library/bb490893.aspx
zundarz 2012年

2
@zundarz:不客气!Windows中可移动设备的默认“ 删除”策略是“ 快速删除”,它禁用了写缓存,并允许一个人删除驱动器而无需先安全地删除它。有关更多信息,请参见此屏幕截图。因此,如果在故障恢复控制台中对可移动驱动器进行同样的处理,Jared关于拉动驱动器的建议通常也不会导致数据丢失。不过,为了让您省心,我始终会小心地取出每个驱动器,然后再将其拔出。可能会成为安慰剂,但不必担心。:)
Karan 2012年

PS请注意Diskpart-它功能强大,因此非常危险。之所以将其用于驱动器拆卸,是因为它可以从XP的故障恢复控制台和Vista / 7的系统恢复选项/命令提示符中获得。
卡兰2012年

Diskpart在正常Windows模式下尝试使用。这是我执行上述第5步后收到的消息。“ DiskPart成功删除了驱动器号,但是您的计算机需要重新启动才能使更改生效。Diskpart成功卸载了该卷。” 我尝试在可移动媒体(SD卡)上而不是在可移动设备(例如SD卡读取器或USB闪存驱动器)上使用它。读取器上的LED指示灯没有熄灭,但保持点亮(即,它停止闪烁,因为仅在其中装有SD卡时才停止闪烁)。因此,我认为将其移除是安全的。
萨米尔

3
撤消remove all dismount命令,必须使用该mountvol命令。有关更多信息,请参见此处此处的 Technet库。使用完后,mountvol必须重新启动才能使更改生效。或者,您也可以使用磁盘管理来分配新的驱动器号。
萨米尔

17

要回答这个问题...您不需要第三方的东西。

使用命令行(或PowerShell),如何告诉Windows在没有用户输入的情况下自动安全地删除硬件?

运行以下命令: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll 弹出“安全删除硬件”对话框:

安全删除硬件对话框


4
您能描述一下吗?
加拿大卢克REINSTATE MONICA 2012年

1
启动安全移除对USB
climenole

11
那我还不需要单击某些内容吗?
加拿大卢克REINSTATE MONICA,2012年

2
这很酷,但不幸的是出于自动化的目的,它并不比Karan的建议要好。
Synetech 2013年

1
控制hotplug.dll,即没有_RunDLL,在Vista SP2上对我不起作用
user66001 2015年

2

由于它是备份设备,所以它意味着它是存储设备,因此可以通过powershell完成-只需将X:替换为所需的驱动器号即可:

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

1
我已经在serverfaultstackoverflow上看到了该解决方案,但是我似乎无法使其与我的外部HDD一起使用。没有错误消息,它只是不执行任何操作。使用"F:""F:\"没有区别,以管理员身份运行PowerShell也是如此。正在通过任务栏安全删除。我究竟做错了什么?
flolilo

实际的powershell命令不会返回任何错误(红色文本)消息?
忘了

如果我拔下F:\并运行命令,则会收到错误消息,提示我无法运行NULL方法(该消息是德语的,因此我不能完全确定自己翻译正确)。如果我在插入F:\的情况下运行命令,则根本没有消息- $error也为空。顺便说一下,我在Win10 Pro上运行PowerShell 5.1。F:\是一个只有一个分区(F :)的外部USB HDD-可以通过任务栏安全地将其删除,而不会出现问题。
flolilo

有趣的是,当我使用USB-pendrive(也带有一个分区)时,它可以完美工作。两者都启用Better performance了删除策略,尽管这似乎没有什么区别(USB Pendrive可以同时使用这两种设置,USB HDD却没有)。我拥有的第二个Pendrive也不想通过PowerShell命令弹出。工作:超越JetFlash 700(16GB,FAT32),不工作: Seagate Expansion Portable 2015(4TB,NTFS),Sandisk Extreme(32GB,exFAT)。所有这些都在同一个USB端口上尝试了多次。同样,通过任务栏图标安全删除始终有效。
flolilo

@flolilolilo我有同样的问题...
Ploni

1

根据此7tutorials-article,您可以通过设置“快速删除”来启用安全拔出。这将禁用每个设备的写缓存,这对性能的影响可忽略不计?他们针对Windows 7的步骤如下。

编辑)根据此howtogeek文章,设置“快速删除”时仍应小心。这将禁用写缓存,从而避免大多数问题。但是某些程序可能仍在“实时”编写内容,直到明确弹出/删除为止。(编辑结束

脚步:

  • 将设备插入USB驱动器
  • 打开设备管理器
  • 展开磁盘驱动器
  • 右键单击您的可移动驱动器,例如“ USB2.0 Flash Disk USB Device”。
  • 选择属性
  • 单击策略选项卡
  • 启用“快速删除”(禁用“更好的性能”)

编辑)请注意,您需要使用设备管理器来更改设置,不能通过文件资源管理器来完成。(至少在我的Windows 10版本中。)


1
对于备份驱动器来说,这听起来是个好主意!看来这是默认设置(至少在my上Seagate BUP Slim BK USB External Drive)。
Arvo Bowen

1
启用了写缓存的设备无法快速移除。
忘了

1
是否可以全局设置此项,以便将来应用于所有附加的USB存储设备?
DuckMaestro '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.