Powershell отключить usb устройство
The Disable-PnpDevice cmdlet disables a Plug and Play (PnP) device. You must use an Administrator account to disable a device.
Examples
Example 1: Disable a device
This command disables a device that has the specified instance ID.
Parameters
Runs the cmdlet as a background job. Use this parameter to run commands that take a long time to complete.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.
Type: | CimSession [ ] |
Aliases: | Session |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the input object that is used in a pipeline command.
Type: | CimInstance [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Specifies an array of unique instance IDs of devices.
Type: | String [ ] |
Aliases: | DeviceId |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Indicates that this cmdlet returns a WMI error code. By default, this cmdlet does not return a value.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the maximum number of concurrent operations that can be established to run the cmdlet. If this parameter is omitted or a value of 0 is entered, then Windows PowerShell® calculates an optimum throttle limit for the cmdlet based on the number of CIM cmdlets that are running on the computer. The throttle limit applies only to the current cmdlet, not to the session or to the computer.
Я создаю сценарий резервного копирования для Windows 7, и последнее действие, которое я хочу выполнить, - это безопасно «извлечь» USB-накопитель, на который он выполняет резервное копирование. У меня сложилось впечатление, что при постоянном подключении накопителя к одному и тому же порту USB будет сохраняться один и тот же DEV_ID (поправьте меня, если я ошибаюсь). С помощью командной строки (или PowerShell), как я могу сказать Windows, чтобы безопасно удалить оборудование автоматически без участия пользователя?
Точно так же было бы полезно знать о других ОС, у которых есть способ сделать это.
Я должен признать разочарование некоторыми «ответами», приведенными ниже, которые явно не понимают, о чем идет речь, и предоставили варианты, которые явно бесполезны для задачи автоматизации, как об этом просили. ಠ_ಠ > У меня сложилось впечатление, что при подключении накопителя к ОДНОМУ USB-порту все время будет сохраняться один и тот же DEV_ID, поправьте меня, если я ошибаюсь. Это верно. Windows рассматривает диск и порт, к которому он подключен, как идентифицирующую пару. Подключив его к другому порту (к которому он никогда не подключался), вы активируете функцию установки драйверов Windows. Хуже того, если вы присвоили тому непоследовательную букву диска, то при подключении его к новому порту эта буква не будет сохранена, и она получит следующую доступную букву, и вам придется снова назначать букву вручную. (Как ни странно, если вы подключаете диск к порту и позволяете Windows установить для него драйверы, затем назначаете непоследовательную букву диска, а затем отключаете его от вилки другого диска той же марки, модели, и размер, то Windows будет обрабатывать его точно так же, как если бы вы снова подключили предыдущий диск.) Не могли бы вы обновить название, чтобы быть правильным. Я искал ответы на удаление USB-устройств, а не USB-накопителей.RemoveDrive хорошо послужил мне в прошлом
removerive \ x64> RemoveDrive.exe f: -L - код, для тех, кто спешит Это сработало для меня. Интересно, что WqlEventQuery, который я подключил, все еще ждет срабатывания, пока вы физически не извлечете диск. Не знаю об этом, но это меня удивило. Не бывает проблемой для меня в этом случае. RemoveDrive - это хорошо, но проблема в том, что он фактически удаляет весь диск. Для карт-ридеров вместо простого извлечения карты (например, щелчка правой кнопкой мыши и выбора «Извлечь из моего компьютера») и предоставления возможности подключить другое устройство, он удаляет весь карт-ридер, требуя его физического отключения и повторного подключения. подключен или, что еще хуже, перезагружается, если устройство чтения карт памяти встроено (это можно сделать с помощью программного обеспечения, но это раздражает).Помимо RemoveDrive Уве Зибера, упомянутого в другом ответе, существует целый ряд утилит, которые могут это сделать. Вот небольшой список:
USB Disk Ejector - это, прежде всего, утилита на основе графического интерфейса, но она может использоваться с равной эффективностью из командной строки для извлечения диска, с которого запускается программа, или любого диска, указав букву диска / (частичное) имя диска / точку монтирования и т. Д. Бесплатный и открытый исходный код.
Microsoft DevCon - это версия диспетчера устройств для командной строки. Помимо исходной версии эпохи Windows 2000 / XP, доступной на странице KB, существуют новые версии (как 32-разрядные, так и 64-разрядные), доступные из различных источников MS, как упомянуто в этой статье « Где найти DevCon.exe» . DevCon.exe для Windows 7 (и, возможно, также для Windows 8) находится в соответствующем наборе драйверов Windows (WDK) , как указано в этой теме (который также содержит ссылки для загрузки извлеченного исполняемого файла ).
devcon status * или devcon hwids * или devcon findall =usb (для более компактного списка) следует указать аппаратный идентификатор устройства. Например:
USB \ VID_0781 & PID_7113 \ 0001162825
Имя:
Драйвер запоминающего устройства USB работает.
Затем вы можете попробовать удалить устройство с помощью devcon remove "USB\VID_0781&PID_7113" (подстановочные знаки, такие как *, разрешены, но будьте осторожны, иначе вы можете полностью удалить что-то еще!)
Кто-то спросил: « Существует ли команда DOS prompt (cmd.exe из Win7) для извлечения флэш-диска? », Которая, к сожалению, была закрыта как дубликат этого потока. Однако вопрос был об извлечении USB-накопителей во время работы в консоли восстановления Windows / командной строке восстановления системы , поэтому вряд ли какая-либо из приведенных выше утилит поможет. В такой ситуации должен работать следующий метод с использованием Diskpart :
Введите diskpart и дождитесь приглашения diskpart ( DISKPART> )
Тип list volume
Внимательно запишите номер тома USB-накопителя (для справки используйте перечисленные свойства, такие как буква диска, метка, тип и размер)
Тип select volume <number> , где <number> указан номер тома, указанный выше
Тип remove all dismount
Введите, exit чтобы выйти из Diskpart
Теперь вы сможете безопасно удалить USB-накопитель, не опасаясь потери данных.
@zundarz: Всегда пожалуйста! Политика удаления по умолчанию в Windows для съемных устройств - « Быстрое удаление» , которая отключает кэширование записи и позволяет извлекать диск без необходимости его безопасного удаления. Смотрите этот скриншот для более. Таким образом, предложение Джареда о срыве диска обычно не должно приводить к потере данных, если съемные диски также обрабатываются в консоли восстановления также. Тем не менее, для душевного спокойствия я всегда стараюсь безопасно извлекать каждый диск перед его извлечением. Может быть плацебо, но мешает мне беспокоиться. :) PS Будьте осторожны с Diskpart - он мощный и, следовательно, довольно опасный. Причина, по которой я использовал его для размонтирования диска, заключается в том, что он доступен как в консоли восстановления XP, так и в параметрах восстановления командной строки Vista / 7 / командной строке. Чтобы отменить в remove all dismount команду , которую вы должны использовать mountvol команду. Для получения дополнительной информации см. Библиотеку Technet здесь, а также здесь . После того, как вы использовали, mountvol вы должны перезагрузиться, чтобы изменения вступили в силу. Кроме того, вы также можете использовать Управление дисками, чтобы назначить новую букву диска.Чтобы ответить на этот вопрос . Вам не нужны сторонние вещи.
С помощью командной строки (или PowerShell), как я могу сказать Windows, чтобы безопасно удалить оборудование автоматически без участия пользователя?
Я установил концентратор USB 3.0 на моем настольном компьютере.
Я использую его для подключения внешнего диска USB 3.0 для целей резервного копирования, и у меня возникает проблема: Windows 7 по умолчанию включает энергосбережение для указанного концентратора, что приводит к отключению диска во время интенсивных операций ввода-вывода (например, в моем запланированном резервном копировании на 8 вечера).
Я могу отключить этот параметр, выполнив следующие действия:
Перейдите в Диспетчер устройств> Щелкните правой кнопкой мыши концентратор> Свойства> Управление питанием> Снимите флажок Разрешить компьютеру выключать это устройство для экономии энергии.
Жаль, что каждый раз, когда я перезагружаю компьютер, флажок снова проверяется. Есть ли способ отключить этот параметр навсегда?
РЕДАКТИРОВАТЬ : я отредактировал мой вопрос с фактическими английскими именами для настроек выше (это было не очень ясно раньше)
EDIT : Peter Fitzgerald «S ответ описывает именно точто я делалсих пор. Каждый раз, когда я перезагружаюсь, флажок снова отмечается, я ищу способ навсегда отключить его.
EDIT : после прочтения Synetech «сек ответа , я былсостоянии отследить запись реестракоторый изменяется при изменении параметра, который:
Этот ключ изменяется консолью управления всякий раз, когда я снимаю флажок, а также когда я деактивирую и снова активирую устройство с помощью процесса System. Плохо то, что любая настройка в авторизации загадочно игнорируется, и даже при отказе каждой привилегии для всех ключ всегда устанавливается в 1.
Я попытался найти в Интернете, и я нашел это руководство Microsoft . Попытка установить каждый ключ, который они описали, не помогла, кажется, эти ключи игнорируются. Я даже попытался скопировать правильный путь для ключей из существующего .INF, найденного в сети (какие ключи ставить /WDF и какие ключи ставить под родительским), вот так , но я ничего не получил.
Другая полезная информация:
- под HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB\ROOT_HUB_FL30\ , у меня также есть эти два голоса: 5&f0b5d82&0 и 5&21f33a01&0 , который, кажется, отражает конфигурацию ключа выше. Единственное IdleInWorkingState изменение, однако, это то, что описано выше.
- когда я вручную редактирую регистр, значение флажка в диспетчере устройств не меняется, его нужно где-то кэшировать.
Я установил концентратор USB 3.0 на моем настольном компьютере. Я использую его для подключения внешнего диска USB 3.0 в целях резервного копирования, и у меня возникает проблема: Windows 7 по умолчанию включает энергосбережение для указанного концентратора, что приводит к отключению диска во время интенсивных операций ввода-вывода
Вы уверены, что привод отключается к управлению питанием, а не просто потому, что он пытается потреблять слишком много энергии? Вы можете проверить потребление энергии на USB-концентраторе через Диспетчер устройств (рисунки 1 и 2). Убедитесь, что мощность, которую концентратор может предоставить для каждого порта , достаточна для внешнего диска. Если нет, вы можете использовать Y-адаптер USB (рис. 3 и 4) для питания двух портов. (Внешние накопители высокой мощности обычно поставляются с Y-переходником специально для этой цели, поэтому дважды проверьте коробку и руководство.)
Я могу отключить этот параметр, выполнив следующие действия: Перейдите в Диспетчер устройств> Щелкните правой кнопкой мыши концентратор> Свойства> Управление питанием> Снимите флажок Разрешить компьютеру выключать это устройство для экономии энергии.
Жаль, что каждый раз, когда я перезагружаю компьютер, флажок снова проверяется. Есть ли способ отключить этот параметр навсегда?
Если отключение этого параметра действительно решает проблему, то проблема заключается в том, чтобы заставить его придерживаться, а не возвращаться. Одним из вариантов является использование что - то вроде Process Monitor с набором фильтров для соответствующей записи в реестре ( HcDisableSelectiveSuspend ) , чтобы увидеть , что программа изменяет его так , что опция выключена (он должен быть установлен , 1 чтобы отключить управление питанием).
Кстати, вы подключаете диск к различным портам USB? Что касается касается окна, «известное устройство» представляет собой сопряжение из устройства + порт , так что если вы уже подключили устройство к порту А и пусть Windows , установить драйверы для него, то позже вы подключите сохранить устройство в порт B, Windows увидит его как новое устройство и (пере) установит для него драйверы вместе с настройками по умолчанию, Поэтому вы должны переустановить все настройки, когда вы подключите его к новому порту. После этого Windows должна запомнить настройки как для нового, так и для старого порта. Возможно, вы захотите подключить свои накопители один раз к каждому USB-порту и настроить их так, чтобы вы могли быть уверены, что все они будут настроены в будущем, независимо от того, к какому порту вы их подключите. (То же самое касается букв дисков, но они, как правило, менее надежны из-за эфемерной природы букв дисков для съемных томов.
Один из способов предотвратить восстановление настроек в Windows - просто запретить доступ к настройкам. Это требует использования редактора реестра, который может быть рискованным, если вы не будете осторожны, поэтому примите обычные меры предосторожности при резервном копировании и перепроверьте, прежде чем вносить изменения (особенно при удалении чего-либо, что вам не следует делать здесь в любом случае).
Сначала вам нужно найти соответствующий идентификатор устройства:
- Откройте диалоговое окно « Свойства корневого концентратора USB » для своего концентратора в диспетчере устройств (рисунок 1), затем перейдите на вкладку « Управление питанием ».
- Измените значение Allow to turn off флажка (не важно на что, просто измените его), но не нажимайте OK (рисунок 5)
- Запустите Process Manager и установите фильтр (рисунок 6):
- Ctrl + L
- Набор для Path , contains , DisableSelectiveSuspend , Include
- щелчок Add
- Установить еще один фильтр для Operation , contains , setvalue , Include
- Add
- щелчок OK
Запишите четырехзначный идентификатор устройства после GUID (рисунок 7); в этом примере 0055 :
Нажмите на строку в Process Monitor, нажмите Ctrl +, J чтобы открыть Regedit и перейти непосредственно к клавише (если это не работает, откройте Regedit и вручную перейдите к клавише)
Настройте параметр на то, что вы хотите, чтобы он был в последний раз (снимите флажок на вкладке Управление питанием и нажмите OK )
Теперь заблокируйте эту настройку и заблокируйте доступ к ключу (рисунок 8):
Теперь никто, не вы, даже сама система не смогут изменить настройку (но они все равно могут ее прочитать), поэтому она всегда должна оставаться на том же уровне, что и вы, прежде чем устанавливать ее только для чтения. (При необходимости вы можете восстановить доступ для записи, удалив разрешения для конкретного элемента в диалоговом окне « Дополнительные параметры безопасности » и повторно установите Inherit from parent флажок.
Конечно, вам нужно будет перезагрузить компьютер, чтобы убедиться, что настройки остались прежними.
Если диск по- прежнему завершает работу, попробуйте установить HKLM\System\CurrentControlSet\Services\usb\DisableSelectiveSuspend для 1 и сделать его только для чтения , как описано выше. Этот параметр отсутствует в нормальной системе, и при этом он не задокументирован, как HcDisableSelectiveSuspend (единственные ссылки на него находятся на страницах сообщества), но Windows, похоже, запрашивает это значение раньше HcDisableSelectiveSuspend (рисунок 7), поэтому его стоит попробовать.
На этом этапе, если вы хотите, вы можете вернуться и диагностировать основную проблему, а не просто лечить симптом. Вы можете использовать вышеупомянутый фильтр, чтобы иметь доступ к записи в журнале Process Monitor для записи реестра во время запуска (« Параметры» → «Включить ведение журнала загрузки» ) и во время завершения работы (что немного сложнее ), чтобы точно определить, что его меняет. Тогда вы можете скрестить пальцы и надеяться, что есть способ предотвратить это.
Рисунок 1 : Снимок экрана USB-концентратора в диспетчере устройств
Рисунок 2 : Скриншот энергопотребления на USB-концентраторе
Рисунок 3 : Фотография Y-адаптера USB
Рисунок 4 : Схема использования USB Y-адаптера
Рисунок 5 : Снимок экрана вкладки «Управление питанием» USB-концентратора
Рисунок 6 : Необходимые фильтры Process Monitor
Рисунок 7 : Снимок экрана соответствующей записи реестра в результатах Process Monitor
Рисунок 8 : Блок-схема установки раздела реестра только для чтения
Как программно можно отключить / блокировать USB порт (чтобы девайс в это время был неактивен) ?
Сначала думал отключать конкретное устройство, перепробовал несколько вариантов c enSO и переведённые на ruSO , но все упиралось в то, что некоторые устройства отключить было невозможно.
Подумал что можно тогда просто отключать USB порты.
На enSO нашёл про отключение всех портов сразу и что этот способ будет работать только после перезагрузки.
А можно ли отключать питание / блокировать конкретный USB порт без перезагрузок ? Или же отключать не отключаемые устройства ?
1,502 1 1 золотой знак 16 16 серебряных знаков 34 34 бронзовых знака Из скрина, конечно, ясно, о какой OS идёт речь, но все же стоило добавить об этом информацию явно в вопрос/тэги)Нашел в интернете класс:
Если ты на руках имеешь GUID и instancePath (то есть путь в менеджере устройств) то девайс можно отключить следующим образом:
конкретно этим кодом и конкретно этими значениями я себе отключил мышку для теста :)
Но этим способом так же под вопросом выйдет ли отключить конкретный девайс. Не все девайсы это поддерживают.
Так же, судя по тексту, нужно твою прогу компилить именно в х64 (в той платформе -- в которой у тебя операционка).
С поиском GUID девайса все довольно просто: девайс менеджер -> ищешь нужный девайс -> пропертиз -> Ивентс -> в блоке инфрпмации будет "Class Guid".
с поиском программного пути конкретного девайса разберешся сам. Вопрос стоял об отключении девайса :)
А можно ли отключать питание
Внезапно (для меня лично), но это возможно.
Как видно по второму ответу прога DevManView.exe умеет отключать в рантайме. Значит это ВОЗМОЖНО (лично я думал что это блокировано на хардварном уровне) . Но как сделать это напрямую из шарпа я не подскажу. :) Только если использовать консольные возможности этой проги -- снова таки, по линке описано как.
блокировать конкретный USB порт без перезагрузок?
Не понимаю что такое "блокировать". Если ты про просто дисейбл устройства как через девайс менеджер - то реализация выше. Без перезагрузок.
Если ты про "блокировать ручное включение девайса" -- ты можешь просто устроить слежку за тем, не включили ли этот девайс без твоего разрешения в отдельном потоке и автоматом отключать. Криво, но будет работать как тебе нужно.
Читайте также: