PowerShell 可通过 ARP 缓存机制静默扫描局域网在线主机,比传统 ping 更可靠;先发轻量 ICMP 触发 ARP 请求,再读取 Reachable/Stale 状态条目获取真实在线设备的 IP、MAC 及状态。
powershell 是 windows 自带的强力工具,无需额外安装软件,就能高效、静默地探测局域网内哪些主机在线。关键在于避开传统 ping 的低效和误判(比如防火墙屏蔽 icmp 导致“假离线”),转而利用系统底层协议行为——尤其是 arp 缓存机制。
直接用内置命令快速扫描(推荐新手)
打开 PowerShell(以管理员身份运行更稳妥,尤其涉及 ARP 表读取),执行以下命令:
$ipRange = 1..254 | ForEach-Object { "192.168.1.$_" }
$ipRange | ForEach-Object {
$null = Test-Connection $_ -Count 1 -Quiet -ErrorAction SilentlyContinue
Start-Sleep -Milliseconds 10
} | Out-Null
Get-NetNeighbor | Where-Object { $_.State -eq 'Reachable' -or $_.State -eq 'Stale' } | Select-Object IPAddress, LinkLayerAddress, State说明:
- 它先向整个 C 段(如
192.168.1.1到192.168.1.254)发一次轻量Test-Connection,不等待响应,只为触发 ARP 请求; - 然后立刻读取本地 ARP 缓存表(
Get-NetNeighbor),筛选出状态为Reachable或Stale的条目——这两类都代表设备真实存在且近期通信过; - 输出包含 IP 地址、MAC 地址和状态,比单纯 ping 更可靠。
⚠️ 注意:网段需按你实际环境修改(如
192.168.0.x或10.0.0.x)。可先用ipconfig查看本机 IPv4 地址确认子网。
使用成熟脚本一键扫描(适合批量/进阶)
社区已有稳定封装的模块,例如 Invoke-TSPingSweep:
- 下载脚本(如从 TechNet Gallery 或 GitHub)保存为
Invoke-TSPingSweep.ps1; - 在 PowerShell 中执行:
Import-Module .\Invoke-TSPingSweep.ps1 Invoke-TSPingSweep -StartAddress 192.168.1.1 -EndAddress 192.168.1.254 -ResolveHost -ScanPort -Port 445,135
它会同时完成:
- 异步 ICMP 探测(快)
- 主机名解析(
-ResolveHost) - 关键端口检测(如 SMB 的 445、RPC 的 135,判断是否为 Windows 主机)
- 结果自动整理成表格,含 IP、主机名、响应时间、端口开放状态
✅ 优势:结果更丰富,支持导出 CSV;缺点是需提前下载脚本,且部分企业环境可能默认禁用脚本执行策略(可用
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser临时允许)。
结合 NetBIOS 协议补充识别 Windows 设备
很多 Windows 主机即使禁 ping,仍响应 NetBIOS 名称查询(UDP 137 端口):
# 使用系统自带的 nbtstat(无需额外工具)
1..254 | ForEach-Object {
$ip = "192.168.1.$_"
$result = nbtstat -A $ip 2>$null | Select-String "Name"
if ($result) { Write-Output "$ip → $($result.Line.Trim())" }
}输出类似:192.168.1.10 → WORKSTATION<00>
这能直接告诉你主机名和 NetBIOS 类型(<00> 是工作站,<20> 是文件共享服务),对识别办公终端特别实用。
小技巧提升准确率和效率
- 白天+夜间各扫一次:有些设备(如打印机、IoT 设备)可能休眠,分时段扫描可减少漏报;
- 对比 ARP + 端口 + NetBIOS 三类结果:任一命中即视为在线,交叉验证更稳;
-
跳过网关和广播地址:通常
.1是路由器,.255是广播地址,扫描时可排除,加快速度; -
加
-Quiet和-ErrorAction SilentlyContinue:避免大量错误提示干扰,保持输出干净。
不复杂但容易忽略。

















