Я не могу воспроизвести ошибку, но похоже, что тип приводного объекта изменяется с «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}