我正在为Windows 7构建备份脚本,而我希望它执行的最后一个操作是安全地“删除”要备份的USB驱动器。我的印象是,始终将驱动器插入相同的 USB端口将保持相同的DEV_ID(如果我输入错了,请纠正我)。使用命令行(或PowerShell),如何告诉Windows在没有用户输入的情况下自动安全地删除硬件?
就像一个占位符一样,其他可能有办法做到这一点的OS也将很高兴知道。
我正在为Windows 7构建备份脚本,而我希望它执行的最后一个操作是安全地“删除”要备份的USB驱动器。我的印象是,始终将驱动器插入相同的 USB端口将保持相同的DEV_ID(如果我输入错了,请纠正我)。使用命令行(或PowerShell),如何告诉Windows在没有用户输入的情况下自动安全地删除硬件?
就像一个占位符一样,其他可能有办法做到这一点的OS也将很高兴知道。
Answers:
过去,RemoveDrive对我的服务很好
除了另一个答案中提到的Uwe Sieber的RemoveDrive之外,还有一大堆实用程序可以完成此任务。以下是一个小清单:
USB Disk Ejector主要是基于GUI的实用程序,但是可以通过在命令行中使用同样的方式来弹出运行程序的驱动器,或者通过指定驱动器号/(部分)驱动器名称/安装点等来弹出任何驱动器。免费和开源。
USB安全删除不是免费的,但它是类固醇上的磁盘删除实用程序,具有许多高级功能,当然包括命令行支持。Zentimo是大哥哥,有甚至 更多 的功能。
微软自己的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的以下方法应该可以工作:
输入diskpart
并等待diskpart提示符(DISKPART>
)
类型 list volume
仔细记下USB驱动器的卷号(使用驱动器号,标签,类型和大小等列出的属性来寻求帮助)
输入select volume <number>
,其中<number>
上述的卷号在哪里
类型 remove all dismount
键入exit
以退出Diskpart
现在,您应该可以安全地卸下USB驱动器,而不必担心数据丢失。
Diskpart
在正常Windows模式下尝试使用。这是我执行上述第5步后收到的消息。“ DiskPart成功删除了驱动器号,但是您的计算机需要重新启动才能使更改生效。Diskpart成功卸载了该卷。” 我尝试在可移动媒体(SD卡)上而不是在可移动设备(例如SD卡读取器或USB闪存驱动器)上使用它。读取器上的LED指示灯没有熄灭,但保持点亮(即,它停止闪烁,因为仅在其中装有SD卡时才停止闪烁)。因此,我认为将其移除是安全的。
要回答这个问题...您不需要第三方的东西。
使用命令行(或PowerShell),如何告诉Windows在没有用户输入的情况下自动安全地删除硬件?
运行以下命令: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll
弹出“安全删除硬件”对话框:
由于它是备份设备,所以它意味着它是存储设备,因此可以通过powershell完成-只需将X:替换为所需的驱动器号即可:
$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")
"F:"
或"F:\"
没有区别,以管理员身份运行PowerShell也是如此。正在通过任务栏安全删除。我究竟做错了什么?
$error
也为空。顺便说一下,我在Win10 Pro上运行PowerShell 5.1。F:\是一个只有一个分区(F :)的外部USB HDD-可以通过任务栏安全地将其删除,而不会出现问题。
Better performance
了删除策略,尽管这似乎没有什么区别(USB Pendrive可以同时使用这两种设置,USB HDD却没有)。我拥有的第二个Pendrive也不想通过PowerShell命令弹出。工作:超越JetFlash 700(16GB,FAT32),不工作: Seagate Expansion Portable 2015(4TB,NTFS),Sandisk Extreme(32GB,exFAT)。所有这些都在同一个USB端口上尝试了多次。同样,通过任务栏图标安全删除始终有效。
根据此7tutorials-article,您可以通过设置“快速删除”来启用安全拔出。这将禁用每个设备的写缓存,这对性能的影响可忽略不计?他们针对Windows 7的步骤如下。
(编辑)根据此howtogeek文章,设置“快速删除”时仍应小心。这将禁用写缓存,从而避免大多数问题。但是某些程序可能仍在“实时”编写内容,直到明确弹出/删除为止。(编辑结束)
脚步:
(编辑)请注意,您需要使用设备管理器来更改设置,不能通过文件资源管理器来完成。(至少在我的Windows 10版本中。)
Seagate BUP Slim BK USB External Drive
)。