windows Win32_PnPEntity未获取隐藏设备

hsvhsicv  于 2023-03-24  发布在  Windows
关注(0)|答案(3)|浏览(200)

我正在使用Win32_PnPEntity类来获取计算机中的所有设备,但Win32_PnPEntity类没有列出隐藏的设备。Windows设备管理器中的隐藏设备具有状态“当前,此硬件设备未连接到计算机。(代码45)”,并且可以通过单击设备管理器中的菜单选项来显示:查看〉显示隐藏的设备(Windows 10)。
有谁知道怎么拿到隐藏的装置吗?

syqv5f0l

syqv5f0l1#

您可以使用以下命令执行此操作:

Get-PnpDevice -class "Ports"

Status     Class           FriendlyName
------     -----           ------------                                                                         
OK         Ports           Communications Port (COM1)                                                           
Unknown    Ports           Silicon Labs Dual CP2105 USB to UART Bridge: Enhanced  
Unknown    Ports           Arduino Uno (COM5)                                                               
Unknown    Ports           Silicon Labs Dual CP2105 USB to UART Bridge: Standard 
OK         Ports           Prolific USB-to-Serial Comm Port (COM6)

在这里,您可以看到我的COM端口已断开连接(状态:不详)

f8rj6qna

f8rj6qna2#

不知为何,似乎Microsoft已在后端对Win32_PnpEntity进行了硬编码,以便仅在使用Get-PnpDevice时返回非“OK”设备。您可以通过将名为“MI_OPERATIONOPTIONS_POWERSHELL_CMDLETNAME”的特殊CIM选项设置为包含值“-PnpDevice”来模拟此行为(例如'Get-PnpDevice')。这将在PowerShell之外工作(即在其他语言中),如果您使用的是支持设置CIM选项的CIM库/函数。然而,我不相信,不幸的是,有任何方法可以在原始WMI查询中设置此变量。

$CimSession = New-CimSession
$Options = [Microsoft.Management.Infrastructure.Options.CimOperationOptions]::new()
$Options.SetOption('MI_OPERATIONOPTIONS_POWERSHELL_CMDLETNAME','XXX-PnpDevice')
$CimSession.EnumerateInstances('ROOT/CIMV2','Win32_PnpEntity',$Options) | Where-Object 'Status' -ne 'OK'
xqnpmsa8

xqnpmsa83#

你可以使用ConfigManagerErrorCode。参考Win32_PnPEntityWin32_PnPEntity MSDN。你没有提到你是使用powershell还是C#来编写脚本,我假设是powershell。

$result = @{Expression = {$_.Name}; Label = "Device Name"},
          @{Expression = {$_.ConfigManagerErrorCode} ; Label = "Status Code" }

    Get-WmiObject -Class Win32_PnpEntity -ComputerName localhost -Namespace Root\CIMV2 | Where-Object {$_.ConfigManagerErrorCode -gt 0 } | Format-Table $result

相关问题