使用 PowerShell 弹出/卸载驱动器

use*_*235 8 eject powershell hard-drive external-hard-drive windows-10

我想通过 PowerShell 弹出/卸载外部 USB 驱动器。

意思是,我想准确复制这些 UI 操作的行为(通过 Windows UI 弹出驱动器):

通过 Windows UI 弹出驱动器

目前我正在使用这个脚本:

$drive_letter="G"
$vol = get-wmiobject -Class Win32_Volume | where{$_.Name -eq $drive_letter+":\"}  
$vol.DriveLetter = $null
$vol.Put()  
$vol.Dismount($false, $false)
Run Code Online (Sandbox Code Playgroud)

但是,当我再次连接驱动器时,它不会显示在驱动器列表中。我认为这是因为驱动器号与驱动器的 GUID 相关联,并且因为:$vol.DriveLetter = $null

我也尝试过这个:

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("G:").InvokeVerb("Eject")
Run Code Online (Sandbox Code Playgroud)

但没有成功。

对于它的价值,$driveEject.Namespace(17).ParseName("G:")回报:

Application  : System.__ComObject
Parent       : System.__ComObject
Name         : Backup (G:)
Path         : G:\
GetLink      :
GetFolder    : System.__ComObject
IsLink       : False
IsFolder     : True
IsFileSystem : True
IsBrowsable  : False
ModifyDate   : 12/30/1899 12:00:00 AM
Size         : 0
Type         : Local Disk
Run Code Online (Sandbox Code Playgroud)

如何卸载驱动器,以便它执行用户通过 Windows UI 弹出驱动器时执行的操作?

小智 4

最干净的解决方案是调用 Eject 动词,它会处理所有事情。

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject")
Run Code Online (Sandbox Code Playgroud)