web-dev-qa-db-fra.com

Activation / désactivation du périphérique dans Windows 10 à partir de la ligne de commande

J'ai un matériel spécifique que je voudrais désactiver et réactiver à chaque redémarrage de Windows. J'ai créé un script batch qui est censé faire cela, ainsi que l'exécution de mon programme par la suite:

cd %~dp0
devcon.exe disable "PCI\VEN_1002&DEV_687F"
timeout /t 3
devcon.exe enable "PCI\VEN_1002&DEV_687F"

runMyWindows.exe --totally-not-virus

Je ne sais pas si devcon.exe est une application appropriée pour cela en premier lieu parce que je n'ai aucune expérience avec l'écriture de scripts Windows.

Cependant, j'ai remarqué que ces commandes ne font pas tout à fait le travail parce que mon runMyWindows.exe le programme ne fonctionne pas comme il se doit jusqu'à ce que je me rende dans le Gestionnaire de périphériques Windows et que je désactive et réactive manuellement ce périphérique.

Je n'ai qu'un seul utilisateur sur cette machine qui est dans le groupe "Administrateur" et je n'exécute pas ce script d'une manière spéciale, sauf en double-cliquant sur .bat fichier, ou en cas de redémarrage, il est exécuté à partir du dossier de démarrage (C:\Users\oxxo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup).

Existe-t-il un moyen de le faire correctement dans mon script de commandes qui devrait être exécuté automatiquement au démarrage de Windows?

4
errata

En raison des "améliorations" de la sécurité dans Windows 10 et certainement depuis Windows Vista et l'introduction de User Account Control Je suppose que vous devrez Run as administrator, pas seulement être membre du groupe Administrateurs.

Il faut généralement lire que Run as administrator veux dire Run as the user with the account name Administrator ne pas Run as any user who holds membership of the Administrators group.

À Run as administrator, faites un clic droit sur le fichier batch et sélectionnez Run as administrator dans le menu contextuel.

Il existe également d'autres façons de fonctionner en tant qu'administrateur.

  • Vous pouvez utiliser un fichier de commandes à élévation automatique, qui utilise généralement une fonction d'assistance PowerShell ou WSH.
  • Vous pouvez utiliser Task Scheduler et choisissez les déclencheurs et informations de compte appropriés, (éventuellement en utilisant le compte SYSTEM).

De plus, vous devez vous assurer que DevCon.exe est soit:

  • À côté du fichier de commandes, "%~dp0DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"
  • À un emplacement défini dans% PATH%, DevCon Disable "PCI\VEN_1002&DEV_687F*"
  • Appelé à l'aide de son chemin complet, "C:\Tools\DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"

Dans tous les cas ci-dessus, veuillez noter l'astérisque qui manque dans vos exemples

3
Compo

La plupart des gens qui liront ce fil ne trouveront pas l'autre réponse très utile, car il s'agit principalement de savoir comment exécuter le script dans la question avec des privilèges d'administrateur. Je vais essayer de répondre aux questions implicites ici:

Activer/désactiver un appareil via la ligne de commande

J'ai trouvé plus facile d'utiliser devcon.exe (6 Mo), comme dans la question:

set HARDWARE_ID="PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
devcon disable %HARDWARE_ID%
timeout /t 3
devcon enable %HARDWARE_ID%

devcon.exe nécessite des privilèges d'administrateur.

Où trouver devcon?

Cela fait partie de la boîte à outils de développement de pilotes Windows. Malheureusement, les ressources officielles vous demandent de télécharger un SDK 1 Go. J'ai pu contourner cela en suivant l'une des réponses ici: https://superuser.com/questions/1002950/quick-method-to-install-devcon-exe

Une fois que vous l'avez, assurez-vous que devcon.exe est sur votre %PATH%. J'ai mis le mien dans C:\Windows\System32\.

Recherchez l'ID matériel de l'appareil que vous souhaitez manipuler

Ouvrez une invite de commande avec des privilèges d'administrateur et effectuez devcon hwids *, qui imprimera tous les appareils et leurs ID correspondants. Cela produira beaucoup de sortie. Utilisez la fonction de recherche des invites de commande pour trouver ce dont vous avez besoin. Voici la section qui m'intéressait:

PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61\4&6AB551C&0&00E1
    Name: Intel(R) Wireless WiFi Link 4965AGN
    Hardware IDs:
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086
        PCI\VEN_8086&DEV_4229&CC_028000
        PCI\VEN_8086&DEV_4229&CC_0280
    Compatible IDs:
        PCI\VEN_8086&DEV_4229&REV_61
        PCI\VEN_8086&DEV_4229
        PCI\VEN_8086&CC_028000
        PCI\VEN_8086&CC_0280
        PCI\VEN_8086
        PCI\CC_028000
        PCI\CC_0280

Choisissez un ID suffisamment spécifique et vérifiez si cela fonctionne en faisant:

devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"

Si cela ne trouve qu'un seul appareil, et c'est celui que vous voulez, vous êtes bon. Notez que vous voudrez souvent échapper l'ID matériel avec des guillemets.

Bonus: exécution d'un script .bat au démarrage ou à la mise sous tension

Dans mon cas, j'ai également dû exécuter ce script lorsque l'ordinateur a démarré après l'arrêt ou la mise en veille. J'ai donné les autorisations sensibles au script ci-dessus et utilisé le Planificateur de tâches pour l'exécuter à la connexion et au démarrage, dans sa terminologie: https://www.sevenforums.com/tutorials/67503-task-create-run-program- startup-log.html? ltr = T

2