Вопрос или проблема
Я должен использовать эту команду PowerShell, чтобы извлечь USB-накопитель
$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject")
Когда я это делаю, Windows всегда спрашивает меня о подтверждении. Как я могу сделать так, чтобы он принудительно извлекал или автоматически подтверждал с помощью этой команды? Я исследовал некоторые предложения, такие как здесь, но ни одно из них, похоже, не работает с этой конкретной командой.
Вы не говорите, какую операционную систему или версию PowerShell вы используете, хотя это может быть несущественно, исходя из вашего кода.
Разница между тем, что вы делаете, и тем указателем, который вы разместили, заключается в том, что этот пост касается файлов, а не оборудования.
Это работает для меня (что практически то же самое, что и ваше) на моей сборке Win10 SCU. То есть, вы просто получаете уведомление о том, что можно удалить, но не подтверждение.
($DriveLetter = (Get-WmiObject -Class Win32_Volume | where {$_.drivetype -eq '2'} ).DriveLetter)
$Eject = New-Object -comObject Shell.Application
$Eject.NameSpace(17).ParseName($DriveLetter).InvokeVerb(“Eject”)
В проводнике вы заметите, что накопитель все еще отображается, минус вся информация о нем, так что его безопасно удалить.
Ответ или решение
Чтобы автоматизировать процесс безопасного извлечения USB-устройств с помощью команды PowerShell, можно использовать объект COM Shell.Application. Указанная вами команда выполняет извлечение, но выводит подтверждение на экране. Это может быть неудобным, особенно если вам нужно выполнить это действие автоматически.
Решение: Автоматическое извлечение USB
Вот подробное объяснение, как можно извлечь USB-устройство автоматически без подтверждения:
- Настройка команд: Версия вашего PowerShell и операционная система могут повлиять на результаты. В данном случае приведу рабочий пример, который должен функционировать на Windows 10 и выше.
$DriveLetter = "E:" # Укажите букву вашего USB-устройства
$Eject = New-Object -comObject Shell.Application
$Eject.Namespace(17).ParseName($DriveLetter).InvokeVerb("Eject")
- Проверка доступных дисков: Для автоматизации подбора буквы диска можно использовать:
$DriveLetter = (Get-WmiObject -Class Win32_Volume | Where-Object {$_.DriveType -eq '2'}).DriveLetter
$Eject = New-Object -comObject Shell.Application
$Eject.Namespace(17).ParseName($DriveLetter).InvokeVerb("Eject")
Этот код позволяет найти букву всех доступных USB-устройств и выполнить команду извлечения. Убедитесь, что вы имеете соответствующие права доступа для выполнения данных команд.
-
Создание сценария: Рассмотрите возможность создания сценария, который будет запускаться по расписанию или по необходимости. Это может быть особенно полезно в случае использования нескольких USB-устройств.
-
Тестирование: Протестируйте команду, чтобы убедиться, что устройство извлекается без запроса на подтверждение. Обратите внимание, что в случае использования не всех дисков порой вывод сообщения "безопасно удалить" остаётся, но это не нарушает работу.
Важные замечания
- Права пользователя: Убедитесь, что вы выполняете команду с правами администратора, если это требуется для доступа к расширенным функциям системы.
- Безопасность данных: Перед извлечением USB-устройства желательно убедиться, что с ним не происходит активных операций, чтобы избежать потери данных.
- Версия PowerShell: Убедитесь, что вы используете последнюю версию PowerShell, так как в старых версиях могут быть ограничения.
Таким образом, следуя данным указаниям, вы сможете автоматизировать извлечение USB-устройств без необходимости ручного подтверждения.