WQL Query untuk menghubungkan semua perangkat ke hub tertentu

0

Apa sintaks WMI / WQL Query untuk menghubungkan semua perangkat ke USB Hub tertentu?

Saya dapat membuka terminal PS dan menghitung semua Perangkat Hub USB, seperti:

 gwmi Win32_UsbHub | fl *

Output akan mengembalikan daftar semua perangkat USB Hub pada sistem. Berikut adalah contoh dari salah satu perangkat tersebut.

Device ID: USB\VID_0451&PID_DD01\6&16FAF918&1&2, PNP Device ID: USB\VID_0451&PID_DD01\6&16FAF918&1&2, Description: Generic SuperSpeed USB Hub
    Availability
    Caption=Generic SuperSpeed USB Hub
    ClassCode
    ConfigManagerErrorCode=0
    ConfigManagerUserConfig=False
    CreationClassName=Win32_USBHub
    CurrentAlternateSettings
    CurrentConfigValue
    Description=Generic SuperSpeed USB Hub
    DeviceID=USB\VID_0451&PID_DD01\6&16FAF918&1&2
    ErrorCleared
    ErrorDescription
    GangSwitched
    InstallDate
    LastErrorCode
    Name=Generic SuperSpeed USB Hub
    NumberOfConfigs
    NumberOfPorts
    PNPDeviceID=USB\VID_0451&PID_DD01\6&16FAF918&1&2
    PowerManagementCapabilities
    PowerManagementSupported
    ProtocolCode
    Status=OK
    StatusInfo
    SubclassCode
    SystemCreationClassName=Win32_ComputerSystem
    SystemName=JMR-ENG-SARAH
    USBVersion

Menggunakan katakanlah PNPDeviceIDuntuk hub ini, saya ingin mendapatkan semua perangkat yang terhubung, jika ada untuk itu.

Saya benar-benar hijau dengan PS dan WMI, tetapi saya berpikir untuk menggunakan ASSOCIATES OFsebagai berikut:

Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"

Anehnya, pencacahan tidak mencantumkan orang tua dan anak-anak, meskipun Pengelola Perangkat mencantumkan hal-hal dengan baik dan memiliki Orang Tua.

Tampilan Device Manager dari <code> Hub USB Generik </code> dan <code> Hub USB SuperSpeed ​​Generik </code> Menampilkan Anak-Anak

Mungkin seperti yang saya ucapkan. Banyak cara lain membuat kesalahan, jadi saya melakukan penelitian dan melihat sintaks ini. Saya awalnya berpikir untuk menggunakan gwmiperintah. Bagaimanapun, saya tahu Device Managerbahwa ada perangkat yang terhubung, tetapi perintah di atas menghasilkan layar kosong.

WMI Explorer tidak banyak membantu.

WMI Explorer

Apa yang akan menjadi SELECTpernyataan untuk digunakan?

Sarah Weinberger
sumber

Jawaban:

0

Wow! ... WMI Explorer, saya belum pernah melihat itu digunakan selama bertahun-tahun. Saya masih memilikinya, dan yang lain menyukainya. PowerShellScript-o-Matic dan sejenisnya 8 ^}

Ada yang lebih baik daripada WMI Explorer, semua ditulis dalam PS. Periksa:

http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser

https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a

Bagaimanapun, seperti untuk permintaan Anda. Tidak semua hal mungkin dilakukan dengan PS sendiri. Ada banyak contoh di mana Anda harus menggunakan kode nyata, artinya, C # / C / C + / C ++ untuk mendapatkan hal-hal semacam ini.

Banyak dari apa yang Anda lihat dalam MMC OS adalah panggilan langsung ke beberapa referensi file / pemrograman DLL / OCX, yang tidak secara langsung diekspos untuk PS untuk bertindak secara langsung. Inilah sebabnya mengapa Add-Type ada, jadi, seseorang dapat menambahkan C # / C / C + / C ++, konstruksi bahasa lain untuk mendapatkan atau interop dengan apa yang diperlukan.

Semua yang dikatakan ... Apakah ini, lebih dekat dengan apa yang Anda cari?

Get-WmiObject -Class Win32_USBControllerDevice | 
%{[wmi]($_.Dependent)} |
Sort Manufacturer,Description,DeviceID |
Format-Table -AutoSize -GroupBy Manufacturer Description,Service,DeviceID

   Manufacturer: (Generic USB Audio)

Description      Service  DeviceID                                     
-----------      -------  --------                                     
USB Audio Device usbaudio USB\VID_047F&PID_C009&MI_00\8&461FC04&0&0000 
USB Audio Device usbaudio USB\VID_17A0&PID_0305&MI_00\9&109E1BB1&0&0000


   Manufacturer: (Standard keyboards)

Description         Service DeviceID                                     
-----------         ------- --------                                     
HID Keyboard Device kbdhid  HID\VID_045E&PID_00DB&MI_00\A&163A9F80&0&0000


   Manufacturer: (Standard monitor types)

Description         Service DeviceID                          
-----------         ------- --------                          
Generic PnP Monitor monitor DISPLAY\ACI2183\C&8538F4&0&UID256 
Generic PnP Monitor monitor DISPLAY\ACI27F6\8&5458763&0&UID256
Generic PnP Monitor monitor DISPLAY\ACI27F6\8&5458763&0&UID257

Atau ini...

Get-WmiObject Win32_PNPEntity | 
Select Manufacturer,Description,Name,Service,DeviceID

Atau lihat ini ...

Manajemen Perangkat Cmdlet PowerShell

Modul ini memperlihatkan cmdlet yang memanggil ke fungsi SetupAPI dan menyediakan fungsi enumerasi dan manajemen perangkat.

https://gallery.technet.microsoft.com/Device-Management-7fad2388

Perbarui per komentar OP

Sesuai komentar saya kepada Anda. Ini harus bermanfaat untuk apa yang Anda cari. Anda dapat membaca seluruh artikel, singkat, tetapi saya telah menambahkan poin penting di sini.

UsbTreeView: Lihat perangkat Usb dan hub mereka dalam bentuk yang ramah pengguna

http://flow-morewithless.blogspot.com/2014/05/idbtreeview-view-usb-devices-and-hubs.html

Anda tidak dapat memperoleh informasi tentang koneksi karena Microsoft ingin informasi tersebut disembunyikan. Hanya cara untuk mendapatkan informasi koneksi anak-orang tua adalah dengan naik ke level driver.

Proyek Visual C dikompilasi ke EXE.

https://github.com/mkielar/get-parent-device

Buat daftar nama yang ramah (Powershell hash array) ada di file UsbDeviceNames.ps1

$OwnUsbDeviceNames = @{
"USB\VID_04E5&PID_0605\6&13F4C3E&0&6"    = "Hama 4port passive USB hub ( the grey one)";
"USB\VID_1A40&PID_0101\6&DF2EE03&0&5"    = "Deltaco Active Usb 2.0 cable";
"USB\VID_1A40&PID_0101\7&19BC4090&0&1"    = "Delock USB2.0 4port active mini hub (the black round one)";
"USB\VID_0403&PID_6001\FTFSDFHD"        = "FTDI Serial (COM5) to projector";
"USB\VID_0403&PID_6001\FTFXXLHS"        = "FTDI Serial (COM8) to tv";
"Something" = "is nothing"
}

Alat PS

https://github.com/MarkoMarjamaa/UsbTreeView

postanote
sumber
terima kasih telah meluangkan waktu untuk menjawab, namun tidak. Apa yang saya kejar adalah saya menentukan ID perangkat hub USB tertentu, seperti "Hub USB SuperSpeed ​​Generic USBHUB3 USB \ VID_0451 & PID_DD01 \ 6 & 16FAF918 & 1 & 2" dan mendapatkan kembali semua perangkat yang terhubung ke hub itu. Ya, saya menyadari bahwa beberapa hub USB eksternal memiliki sub hub "root", yang memerlukan satu tingkat lebih dalam untuk mendapatkan akses ke semua perangkat yang terhubung ke hub. Pengelola Perangkat melakukan pekerjaan yang baik, hanya saja saya perlu melakukan hal yang sama dalam kode.
Sarah Weinberger
Skenario lain di sini adalah bahwa string yang Anda katakan ingin Anda gunakan adalah 4 properti yang berbeda (Nama, Keterangan) dan string * ID (Perangkat, PnP) berisi beberapa karakter yang dianggap dilindungi undang-undang / khusus di PS, sehingga penghentian char menjadi bermain. DM melakukan ini dengan desain tentu saja, dan seperti banyak hal, MS dikenal untuk melakukan banyak hal pengetatan untuk membuatnya lebih mudah dibaca manusia, meskipun sumber sebenarnya tidak seperti apa yang ditampilkan. Saya melakukan sedikit lebih banyak bermain-main, dan sejauh ini tidak terlihat menjanjikan.
postanote
Dengan asumsi solusi C #, lalu bagaimana solusi terlihat? Jelas, solusinya mungkin, karena Device Manager menunjukkan hub dan perangkat yang terhubung.
Sarah Weinberger
Saya benar-benar babi data, dan ketika saya menemukan hal-hal yang menarik, saya menyimpannya karena tahu itu akan kembali untuk membantu atau menghantui saya cepat atau lambat. Lihat pembaruan saya untuk Anda. Anda akan perhatikan bahwa solusinya adalah dua bagian. A VC dieksekusi dan kemudian hal-hal PS. Ini bukan kode saya, hanya dan barang yang saya miliki dari sekitar tahun 2014.
postanote