Команда powershell для извлечения устройства, подключенного через USB, не работает с первого раза - PullRequest
1 голос
/ 14 февраля 2020

У меня есть приложение java, которое взаимодействует с устройством, подключенным через USB-накопитель. Я хочу извлечь устройство после обработки. Приведенная ниже команда работает, но я должен попробовать в al oop убедиться, что она извлечена.

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

Не уверен, есть ли какие-либо проблемы с командой. Иногда это работает через 3 или 4 раза.

Кто-нибудь может помочь?

Добавлен снимок экрана здесь: введите описание изображения здесь

1 Ответ

1 голос
/ 15 февраля 2020

Я не могу воспроизвести ошибку, но похоже, что тип приводного объекта изменяется с «USB-накопителя» на «Съемный накопитель» при вызове глагола Eject.

Возможно, вы захотите добавить короткий сценарий к вашей рутине. Что-то вроде:

$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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...