You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过CMD或批处理脚本识别当前活跃的Windows网络配置文件

嘿,我明白你的问题了——你之前用WMIC拿到的是网卡硬件的GUID,但注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\下面的是网络配置文件的GUID,这俩根本不是一回事,所以匹配不上。下面给你两种靠谱的方法,直接找到当前活跃网络对应的注册表项:

方法1:用PowerShell快速获取(推荐)

PowerShell可以直接抓取当前活跃网络的配置信息,连注册表都不用手动查,效率很高:

# 查看所有活跃网络的完整配置,包括Profile GUID和网络类型
Get-NetConnectionProfile | Where-Object { $_.Status -eq 'Connected' } | Select-Object Name, NetworkCategory, ProfileGuid

输出里的ProfileGuid就是你要找的注册表子项名称,NetworkCategory直接显示当前网络是Public(公共)、Private(家庭/工作)还是DomainAuthenticated(域)。

如果要直接读取注册表的CategoryCategory Type值,可以用这段脚本:

$activeProfile = Get-NetConnectionProfile | Where-Object { $_.Status -eq 'Connected' }
if ($activeProfile) {
    $regPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\$($activeProfile.ProfileGuid)"
    Get-ItemProperty -Path $regPath | Select-Object Category, 'Category Type'
}

方法2:用CMD命令实现(适合纯CMD环境)

如果必须用CMD,得先通过netsh拿到当前活跃网络的Profile GUID,步骤如下:

  1. 先获取当前活跃网络的接口索引:
for /f "tokens=3 delims=: " %%i in ('netsh interface show interface ^| findstr /i "connected"') do set "InterfaceIndex=%%i"
  1. 通过接口索引提取Profile GUID:
for /f "tokens=2 delims=: " %%g in ('netsh interface ip show config "InterfaceIndex=%InterfaceIndex%" ^| findstr /i "Profile GUID"') do set "ProfileGUID=%%g"
  1. 最后读取注册表的目标值:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\%ProfileGUID%" /v Category
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\%ProfileGUID%" /v "Category Type"

注意:如果同时有多个活跃网络(比如有线+无线都在连接状态),这个脚本会取第一个匹配的接口,你可以在第一步的findstr里加上接口名称过滤,比如findstr /i "connected Ethernet"来指定有线网卡。

补充:注册表Category值对应关系

最后给你补个注册表值和网络类型的对应表,方便你直接判断:

  • Category=0:公共网络(Public)
  • Category=1:私有网络(家庭/工作)
  • Category=2:域网络(DomainAuthenticated)

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

火山引擎 最新活动