使用 powershell 卸载 USB 外置驱动器

JB.*_*JB. 12 scripting windows powershell hard-drive usb

我正在尝试使用 powershell 卸载外部 USB 驱动器,但无法成功执行此操作。以下脚本是我使用的:

#get the Win32Volume object representing the volume I wish to eject 

$drive = Get-WmiObject Win32_Volume -filter "DriveLetter = 'F:'"

#call dismount on that object there by ejecting drive

$drive.Dismount($Force , $Permanent)
Run Code Online (Sandbox Code Playgroud)

然后我检查我的计算机以检查驱动器是否已卸载,但事实并非如此。

布尔参数 $force 和 $permanent 已尝试使用不同的排列,但无济于事。当参数被切换时,卸载命令返回的退出代码会发生变化。

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2
Run Code Online (Sandbox Code Playgroud)

退出代码 2 的文档表明存在安装点是它无法卸载的原因。虽然我试图卸载存在的唯一挂载点,但我不确定这个退出代码试图告诉我什么。

已经在网上搜索遇到类似问题的人后,我只找到了一个额外的命令可以尝试,如下所示:

# executed after the .Dismount() command

$drive.Put() 
Run Code Online (Sandbox Code Playgroud)

这个额外的命令没有帮助。

我没有什么可以尝试的了,所以任何人都可以给我任何帮助将不胜感激。

小智 13

一个干净的解决方案,不会像 pk 的样本那样留下任何半烘焙的开放引用:

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

取自http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html


son*_*i2f 2

我无法从 PowerShell 端很好地回答,您可能想看看如何mountvol操作。有不同程度的下马。

蒙特沃尔还是蒙特沃尔/?

显示卷的名称、全局唯一标识符 (GUID) 和位置。

Mountvol [驱动器:]路径 卷名称

创建新的卷安装点。指定驱动器号根目录或现有的空 NTFS 目录作为装载点的源,并将卷名称指定为目标。

Mountvol [驱动器:]路径 /D

删除现有卷安装点。

Mountvol [驱动器:]路径 /L

列出给定卷安装点的卷名称。

我尝试做一些类似于 VBScript 中所需的操作,以在旧桌面上重新排序设备,其中旧硬件的驱动器安装太繁琐而无法删除(读取闪存驱动器),这会干扰自定义 GUI 上的快捷方式,我只能明确提及安装点( D:、E:、F:) 具有特定目的。这变得非常令人沮丧,你必须使用 mountvol 输入和输出来卸载和重新安装东西,以验证它是否顺利并继续进行更改。我希望你的运气比我好。