
모든 장치를 특정 USB 허브에 연결하는 WMI/WQL 쿼리 구문은 무엇입니까?
다음과 같이 PS 터미널을 열고 모든 USB 허브 장치를 열거할 수 있습니다.
gwmi Win32_UsbHub | fl *
출력은 시스템의 모든 USB 허브 장치 목록을 반환합니다. 다음은 그러한 장치 중 하나의 샘플입니다.
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
이 허브에 대해 말을 사용하여 PNPDeviceID
연결된 모든 장치를 가져오고 싶습니다.
나는 PS와 WMI에 완전히 익숙하지만 ASSOCIATES OF
다음과 같이 사용하려고 생각했습니다.
Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"
짜증나게도 열거형에는 부모와 자식이 나열되지 않지만 장치 관리자는 항목을 훌륭하게 나열하고 부모가 있습니다.
어쩌면 내가 표현한 방식과 똑같을 수도 있습니다. 다른 여러 가지 방법으로 오류가 발생했기 때문에 조사를 통해 이 구문을 확인했습니다. 원래는 명령을 사용하려고 생각했습니다 gwmi
. 어쨌든 Device Manager
연결된 장치가 있다는 것을 알고 있지만 위 명령을 실행하면 빈 화면이 나타납니다.
WMI Explorer
별로 도움이 되지 않았습니다.
SELECT
어떤 진술을 사용해야 합니까 ?
답변1
와우!... WMI 탐색기, 몇 년 동안 사용되는 것을 본 적이 없습니다. 그래도 나는 그것을 가지고 있고 다른 사람들은 그것을 좋아합니다. PowerShellScript-o-Matic 등 8^}
WMI Explorer 대신 PS로 작성된 더 나은 것들이 있습니다. 확인해 보세요:
http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser
https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a
어쨌든, 당신은 질문합니다. PS만으로는 모든 것이 가능한 것은 아닙니다. 이런 종류의 코드를 얻으려면 실제 코드, 즉 C#/C/C+/C++를 사용해야 하는 경우가 많이 있습니다.
이러한 OS의 MMC에서 볼 수 있는 많은 것은 일부 DLL/OCX 파일/프로그래밍 참조에 대한 직접 호출이며 PS가 직접 작동하도록 직접 노출되지 않습니다. 이것이 Add-Type이 존재하는 이유입니다. 따라서 C#/C/C+/C++, 다른 언어 구성을 추가하여 필요한 것을 얻거나 상호 운용할 수 있습니다.
말한 내용은 모두… 이것이 당신이 추구하는 것에 더 가깝습니까?
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
아니면 이거...
Get-WmiObject Win32_PNPEntity |
Select Manufacturer,Description,Name,Service,DeviceID
아니면 이걸 보세요...
장치 관리 PowerShell Cmdlet
이 모듈은 SetupAPI 기능을 호출하고 장치 열거 및 관리 기능을 제공하는 cmdlet을 노출합니다.
https://gallery.technet.microsoft.com/Device-Management-7fad2388
OP 댓글당 업데이트:
내 의견에 따르면. 이것은 당신이 추구하는 것에 유용할 것입니다. 전체 기사를 읽어보실 수 있습니다. 짧지만 여기에 핵심 사항을 추가했습니다.
UsbTreeView : 사용자 친화적인 형식으로 USB 장치 및 허브를 봅니다.
http://flow-morewithless.blogspot.com/2014/05/usbtreeview-view-usb-devices-and-hubs.html
Microsoft는 해당 정보를 숨기기를 원하기 때문에 연결에 대한 정보를 얻을 수 없습니다. 하위-상위 연결 정보를 얻는 유일한 방법은 드라이버 수준으로 이동하는 것입니다.
EXE로 컴파일된 Visual C 프로젝트입니다.
https://github.com/mkielar/get-parent-device
친숙한 이름 목록(Powershell 해시 배열) 만들기는 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" }
PS 도구