You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell获取特定端口外部设备的使用起止时间戳

获取特定端口外部设备连接历史的PowerShell优化方案

问题背景

需要获取特定端口上所有曾连接外部设备的使用开始/结束时间戳,但当前执行的PowerShell命令仅能列出USB设备,无法筛选特定端口的完整连接记录。

原执行命令:

Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' |Where-Object {$_.ID -eq 2003 -or $_.ID -eq 2102} | Select-Object @{Name='TimeCreated';Expression={$_.TimeCreated.ToString('yyyy-MM-dd HH:mm:ss')}}, ID, LogName, MachineName, Message, Opcode, OpcodeDisplayName, ProviderId, ProviderName, RecordId, Task, TaskDisplayName|ConvertTo-Json

优化步骤

  • 明确事件ID对应行为:2003代表设备连接(使用开始),2102代表设备断开(使用结束)。原命令未针对特定端口过滤,需从事件的Message字段中提取端口标识来筛选。
  • 先执行简化命令查看事件Message中的端口相关字段,确认端口的标识格式(比如是PortPath、Port Number还是其他关键词):
    Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' | Where-Object {$_.ID -in 2003,2102} | Select-Object TimeCreated, ID, Message | Select-Object -First 5
    
  • 根据端口标识,添加过滤条件并优化输出字段。例如,假设目标端口标识为Port Number: 3,可调整命令如下:
    Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' | 
    Where-Object {($_.ID -in 2003,2102) -and ($_.Message -match 'Port Number: 3')} | 
    Select-Object 
        @{Name='时间戳';Expression={$_.TimeCreated.ToString('yyyy-MM-dd HH:mm:ss')}},
        @{Name='操作类型';Expression={if($_.ID -eq 2003) {'设备连接'} else {'设备断开'}}},
        @{Name='设备信息';Expression={($_.Message -split '\r\n' | Where-Object {$_ -match 'Device Description'}).Split(':')[1].Trim()}},
        @{Name='端口';Expression={($_.Message -split '\r\n' | Where-Object {$_ -match 'Port Number'}).Split(':')[1].Trim()}} |
    ConvertTo-Json
    
  • 若需要更精准的端口匹配(比如USB端口的硬件路径),可将-match后的内容替换为目标端口的完整标识字符串。

内容的提问来源于stack exchange,提问作者bharath k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:12:54