Kann VBScript überprüfen, ob sich ein bestimmtes Gerät im Geräte-Manager befindet?

462
Matthew Wai

In meinem Geräte-Manager gibt es "Realtek USB FE Family Controller". Nach dem Aufwachen des Computers aus dem Ruhemodus kann der Controller manchmal nicht erkannt werden, und "TK_NIC_DRIVER_INSTALLER.sfx.exe" muss ausgeführt werden, damit er erkannt wird.

Kann VBScript überprüfen, ob der Controller vorhanden ist? Ist dies nicht der Fall, wird der folgende Befehl ausgeführt.

CreateObject("wscript.shell").run("""C:\RTK_NIC_DRIVER_INSTALLER.sfx.exe"""),0 
1
Warum müssen Sie dazu VBScript verwenden, eine Technologie aus der Mitte der 1990er Jahre. Verwenden Sie PowerShell und das Cmdlet `Get-PnpDevice`. Peter Hahndorf vor 6 Jahren 1
Ich möchte VBScript, weil dadurch kein Befehlsfenster angezeigt wird, und ich weiß nicht, wie PowerShell verwendet wird. Matthew Wai vor 6 Jahren 0
Es scheint (zumindest in der Theorie), dass dies möglich sein sollte. Beim Googeln wurde keine direkte Möglichkeit zum Abfragen von Elementen im Geräte-Manager angezeigt (obwohl dies möglich sein könnte), es scheint jedoch, dass Sie eine Liste mit Elementen mit VBScript abrufen können (damit Sie möglicherweise Namen / Informationen vergleichen und prüfen können, ob ein Gerät aufgelistet wurde oder nicht). Die grundlegenden Ansätze schienen entweder die WMI-Schnittstellen für VBScript direkt zum Abrufen von Elementen zu verwenden oder die Ausgabe von msinfo32.exe zu analysieren. Anaksunaman vor 6 Jahren 0

1 Antwort auf die Frage

0
shawn

Sie können die WMI-Klasse win32_PnPEntity verwenden. Hier durchlaufen wir nur die Geräte, die diese Beschreibung haben:

strComputer = "."  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity") For Each objItem In colItems If InStr(1, objItem.Description, "Realtek USB FE Family Controller", 1) > 0 Then CreateObject("wscript.shell").run("""C:\RTK_NIC_DRIVER_INSTALLER.sfx.exe"""),0 End If Next 

Wenn dies nicht funktioniert, müssen Sie möglicherweise auch objItem.Present oder objItem.Status testen