Devcon

Do zarządzania urządzeniami w systemie z linii poleceń, możemy wykorzystać Devcon. Alternatywa dla graficznego ‚Device Manager’.

Po wpisaniu w cmd devcon help otrzymamy:

C:\>devcon help
Device Console Help:
devcon [-r] [-m:\\<machine>] <command> [<arg>…]
-r if specified will reboot machine after command is complete, if needed.
<machine> is name of target machine.
<command> is command to perform (see below).
<arg>… is one or more arguments if required by command.
For help on a specific command, type: devcon help <command>
classfilter          Allows modification of class filters.
classes             List all device setup classes.
disable             Disable devices that match the specific hardware or instance ID.
driverfiles         List driver files installed for devices.
drivernodes      Lists all the driver nodes of devices.
enable              Enable devices that match the specific hardware or instance ID.
find                  Find devices that match the specific hardware or instance ID.
findall               Find devices including those that are not present.
help                  Display this information.
hwids                Lists hardware ID’s of devices.
install                Manually install a device.
listclass             List all devices for a setup class.
reboot               Reboot local machine.
remove             Remove devices that match the specific hardware or instance ID.
rescan               Scan for new hardware.
resources          Lists hardware resources of devices.
restart              Restart devices that match the specific hardware or instance ID.
sethwid             Modify Hardware ID’s of listed root-enumerated devices.
stack                Lists expected driver stack of devices.
status               List running status of devices.
update              Manually update a device.
updateni            Manually update a device (non interactive).

Załóżmy, że naszym celem jest wyłączenie karty sieciowej. Sprawa niby jest prosta, a jednak czasami najwyraźniej sprawia mały kłopot. Można to załatwić naturalnie jedną "linijką", jednak tutaj bardziej chodzi o to, aby pokazać jak dojść do tego, co ma się w tej linijce znaleźć.😉

Listujemy urządzenia poleceniem devcon find *

Lista jest stosunkowo obszerna, więc podarujemy sobie wklejanie. Podczas jej przeglądania trafimy jednak na linijkę identyfikującą naszą kartę. Na przykład dla NICa VMWare, będzie to:

PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&0088: VMware Accelerated AMD PCNet Adapter

Na przyszłość możemy już pójść na małe skróty i od razu zawęzić nasze poszukiwania poleceniem devcon find pci*

Identyfikatorem naszej karty jest więc PCI\VEN_1022. Teraz musimy ją jeszcze tylko wyłączyć poleceniem disable podając odpowiednią klasę i identyfikator.

devcon help disable pokaże nam składnię:

C:\>devcon help disable
devcon [-r] disable <id> [<id>…]
devcon [-r] disable =<class> [<id>…]
Disable devices that match the specific hardware or instance ID.
This command will only work for local machine.
Specify -r to reboot automatically if needed.
Examples of <id> are:
*                            – All devices (not recommended)
ISAPNP\PNP0501     – Hardware ID
*PNP*                     – Hardware ID with wildcards (* matches anything)
@ISAPNP\*\*           – Instance ID with wildcards (@ prefixes instance ID)
<class> is a setup class name as obtained from the classes command.
Devices are disabled if possible.

Potrzebujemy więc dwóch danych <class> i <id>. Id już znamy, a nazwę klasy uzyskamy po wydaniu polecenia devcon classes. Widzimy, że dla kart sieciowych będzie to Net.

Nasze urządzenie wyłączymy więc wpisując:

devcon disable = net pci\ven_1022

Efektem będzie:

C:\>devcon disable = net pci\ven_1022
PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&0088: Disabled 

devcon_disable

Możemy ponownie włączyć kartę, wpisując devcon enable = net pci\ven_1022

Sprawa jednak nieco się komplikuje w sytuacji, gdy w komputerze obecna jest większa ilość kart z tym samym chipsetem. Powyższe polecenia będą bowiem odpowiednio, wyłączać i włączać wszystkie karty o ID PCI\VEN_1022.

Na przykład po wylistowaniu urządzeń na VM z dwiema kartami sieciowymi, otrzymamy:

PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&0088: VMware Accelerated AMD PCNet Adapter
PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&1888: VMware Accelerated AMD PCNet Adapter

Wydanie polecenia devcon disable = net pci\ven_1022 zaowocuje wyłączeniem obu kart:

C:\>devcon disable = net pci\ven_1022
PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&0088: Disabled
PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&1888: Disabled
2 device(s) disabled.

devcon_disable2

Do tej pory identyfikowaliśmy urządzenia po Hardware ID. Rozwiązaniem problemu będzie skorzystanie z Instance ID. Wybieramy więc interesujący nas identyfikator. Załóżmy, że chcemy wyłączyć tylko kartę o Instance ID 4&239552F9&0&0088:

PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&0088
PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\4&239552F9&0&1888

Osiągniemy to wydając polecenie:

devcon disable @*4*239552F9*0*0088

Znakiem ‚@’ informujemy, że używamy właśnie Instance ID i zamieniamy wszystkie ‚&’ na wildcard ‚*’.

Efektem będzie wyłączenie tylko wybranej przez nas karty.

devcon_disable3

2 comments so far

  1. Barbara on

    nie myślałam że tak fajne posty można pisać o poleceniach z lini komend🙂 – pisz Darku tak dalej to częściej będę jej używać🙂

  2. Dariusz on

    No to pomyśl Basiu, jakie pole do popisu mają znawcy PowerShella.😉


Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: