Powershell 如何记录;新pnp装置“;Windows上要控制台的事件?

Powershell 如何记录;新pnp装置“;Windows上要控制台的事件?,powershell,windows-10,Powershell,Windows 10,我想写一些类似于nestat(记录到控制台的新tcp连接)的东西,但要针对带有powershell的pnp设备 我应该定期循环获取PnpDevice并“手动”检查差异,还是有一种API方法“订阅特定于PnP的某种事件总线” 您可以使用WMI事件来执行此操作。例如,这里有一种方法(似乎过于复杂,所以可能有人可以改进): 现在,当您添加/删除设备时,您将在控制台中获得如下输出: PNPEvent: Unplugged Caption: Apple iPhone PNPDeviceID: USB\VI

我想写一些类似于
nestat
(记录到控制台的新tcp连接)的东西,但要针对带有powershell的pnp设备


我应该定期循环
获取PnpDevice
并“手动”检查差异,还是有一种API方法“订阅特定于PnP的某种事件总线”

您可以使用WMI事件来执行此操作。例如,这里有一种方法(似乎过于复杂,所以可能有人可以改进):

现在,当您添加/删除设备时,您将在控制台中获得如下输出:

PNPEvent: Unplugged
Caption: Apple iPhone
PNPDeviceID: USB\VID_05AC&PID_12A8&MI_00\E&2491F388&0&0000    

PNPEvent: Plugged In
Caption: Apple iPhone
PNPDeviceID: USB\VID_05AC&PID_12A8&MI_00\E&2491F388&0&0000
要记住以下几点:

  • 事件注册仅在当前会话中持续
  • 您需要从提升的提示符运行此命令
如前所述,会话结束时应取消注册,但如果要手动执行,可以按如下方式执行:

$addIdentifier, $removeIdentifier | ForEach-Object { Unregister-Event -Force -SourceIdentifier $_ }

非常感谢。Register WmiEvent调用返回错误:无法绑定参数,因为参数“Query”被多次指定。PSVersion是5.1,我认为这是一个格式问题,看起来注册在一行上,但应该是两个单独的调用。我更新了这个示例,使其符合要求。
$addIdentifier, $removeIdentifier | ForEach-Object { Unregister-Event -Force -SourceIdentifier $_ }