如何通过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
相关产品推荐
相关产品推荐

