使用 powershell 卸载 USB 外部驱动器

使用 powershell 卸载 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)

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

已尝试使用不同的排列组合来替换布尔参数 $force 和 $permanent,但均无济于事。dismount 命令返回的退出代码在切换参数时会发生变化。

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

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

我已经在网上搜索过遇到类似问题的人,我只找到了一个可以尝试的附加命令,即以下命令:

# executed after the .Dismount() command

$drive.Put() 

这个附加命令没有帮助。

我已经没有什么可以尝试的了,因此,如果有人能给我提供任何帮助,我将不胜感激。

答案1

一个干净的解决方案不会留下任何半生不熟的开放引用,就像来自 pk 的示例一样:

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

从...获得http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html

答案2

我无法从 PowerShell 端很好地回答,你可能需要看看如何mountvol运作.下马有不同程度。

Mountvol 还是 Mountvol /?

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

Mountvol [驱动器:]路径 卷名

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

Mountvol [驱动器:]路径/D

删除现有的卷装入点。

Mountvol [驱动器:]路径 /L

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

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

答案3

Powershell 与 CMD 类似,可以调用具有挂载或卸载磁盘驱动器所需功能的 Win COM 对象,例如 Shell.Application。

在 powershell 中,例如通过 cmd:

powershell "$driveEject = New-Object -comObject Shell.Application; $driveEject.Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\"); start-sleep -s 3"

通过 powershell 弹出磁盘还需要将其拔出并重新插入才能重新安装。否则,磁盘可能会被卸载,因此无法访问,直到通过mountvol或再次安装它diskpart

例如使用 mountvol:

REM unmount
mountvol e: /D or /P
REM mount for access
mountvol e: \\?\Volume{device GUID in hex with hyphens}\

mountvol 允许将设备安装到文件夹C:\fakedisk\例如驱动器号。

例如使用 diskpart:

REM unmount
(
echo select volume 3
echo remove letter=e dismount
) | diskpart

REM mount again for access
(
echo select volume 3
echo assign letter=e
) | diskpart

在 Win 10 cmd 中测试


相关内容