【问题标题】:powershell command to eject the device connected through usb does not work first time弹出通过usb连接的设备的powershell命令第一次不起作用
【发布时间】:2020-02-20 03:25:27
【问题描述】:

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

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

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

有人可以帮忙吗?

在此处添加屏幕截图: enter image description here

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我无法重现该错误,但在调用 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}
    

    【讨论】:

    • 感谢您的回复。我需要从java程序执行命令。是否可以将上述命令作为单行运行?
    • 我把上面的脚本做成了单行,但是单次使用还是没有弹出。 powershell.exe ((New-Object -comObject Shell.Application).namespace(17).ParseName('E:') ^| Where-Object {$_.Type-eq 'USB Drive'}) ^| ForEach-Object { $_.InvokeVerb('Eject') } 不确定,如果我错过了什么。
    • 更新了答案:-)
    • 感谢脚本。当我尝试它时,它最终不起作用。它只是打印 $obj。 c:\>powershell.exe -Command {$obj = (New-Object -comObject Shell.Application).namespace(17).ParseName('E:\');$Type = $obj.Type;while ($Type -eq 'USB 驱动器'){Write-Host '移除驱动器';$obj.InvokeVerb('Eject');$Type= $obj.Type}} $obj = (New-Object -comObject Shell.Application).namespace (17).ParseName('E:\');$Type = $obj.Type;while ($Type-eq 'USB Drive'){Write-Host '移除驱动器';$obj.InvokeVerb('Eject') ;$Type= $obj.Type}
    • 当我运行该命令时,它会分离 USB 驱动器。你能上传你的控制台截图吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多