首页 > 解决方案 > 弹出通过usb连接的设备的powershell命令第一次不起作用

问题描述

我有一个 java 应用程序,它与通过 USB 驱动器连接的设备进行交互。我想在处理后弹出设备。下面的命令有效,但我必须循环尝试以确保它被弹出。

powershell.exe ((New-Object -comObject Shell.Application).NameSpace(17).ParseName('E:\').InvokeVerb('Eject'))

不确定命令是否有任何问题。有时它会在 3 或 4 次后起作用。

任何人都可以帮忙吗?

在此处添加屏幕截图:在此处 输入图像描述

标签: powershell

解决方案


我无法重现该错误,但在调用 Eject 动词时,驱动器对象的类型似乎从“USB 驱动器”更改为“可移动驱动器”。

您可能想在例程中添加一个简短的脚本。就像是:

$obj = (New-Object -comObject Shell.Application).namespace(17).ParseName('E:\')
$Type = $obj.Type
while ($Type-eq 'USB Drive'){
    $obj.InvokeVerb('Eject')
    $Type= $obj.Type
}

然后,您不必多次运行代码并等待 PowerShell 启动。

这是一个单行:

powershell.exe -Command {$obj = (New-Object -comObject Shell.Application).namespace(17).ParseName('E:\');$Type = $obj.Type;while ($Type-eq 'USB Drive'){Write-Host 'Removing drive';$obj.InvokeVerb('Eject');$Type= $obj.Type}}

如果要在 cmd 而不是 PowerShell 中运行命令,则需要将其格式化如下:

powershell.exe -Command $obj = (New-Object -comObject Shell.Application).namespace(17).ParseName('E:\');$Type = $obj.Type;while ($Type-eq 'USB Drive'){Write-Host 'Removing drive';$obj.InvokeVerb('Eject');$Type= $obj.Type}

推荐阅读