如何在PowerShell中合并代码实现端口关联服务名的结构化输出
PowerShell查询服务对应端口占用实现代码
你可以通过哈希表映射进程ID和服务名的方式合并两段逻辑,最终代码如下:
# 构建进程ID与对应服务名的映射表 $serviceMap = @{} Get-CimInstance Win32_Service | ForEach-Object { $serviceMap[$_.ProcessId] = $_.Name } # 合并TCP/UDP端口查询结果,关联服务名后按端口排序 (Get-NetUDPEndpoint | Select-Object LocalPort, OwningProcess) + (Get-NetTCPConnection | Select-Object LocalPort, OwningProcess) | Sort-Object LocalPort | ForEach-Object { [PSCustomObject]@{ Name = $serviceMap[[int]$_.OwningProcess] ?? "非服务进程" LocalPort = $_.LocalPort OwningProcess = $_.OwningProcess } } # 如需仅展示服务对应的端口,在上面代码最后追加 | Where-Object Name -ne "非服务进程" # 如需对齐输出格式,在代码最后追加 | Format-Table -AutoSize
补充说明
- 原代码中的
Get-WmiObject已被微软官方弃用,这里替换为同等功能的Get-CimInstance,如需兼容PowerShell 2.0及更早版本,可以替换回Get-WmiObject Win32_Service。 - 部分端口可能由普通应用(非系统服务)占用,这类进程的
Name字段会显示为非服务进程,不需要的话可以用注释里的过滤语句筛掉。 - 追加
Format-Table -AutoSize后输出格式会和你提供的示例完全对齐。
内容的提问来源于stack exchange,提问作者Volkan
相关产品推荐
相关产品推荐

