如何通过cmd或批处理脚本查找当前激活的网络配置文件

5
在Windows注册表中,位置如下:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\

我们可以看到一个网络ID列表,其中包含通常以“网络”加数字的单词命名的网络名称,例如Network 1代表有线网络。

当Windows首次检测到新网络时,您会弹出一个窗口询问您是否要将其设置为工作家庭公共位置。您所做的选择会更改上述注册表项中该网络ID的CategoryCategory type

我想获取当前连接的网络配置文件的CategoryCategory type。基本上告诉我我现在连接的网络是工作家庭还是公共

我已经知道如何使用reg query来完成此操作,但是我不知道如何找出上述注册表路径中众多网络配置文件中的哪一个是活动的,而不必查看它们全部并将网络名称与当前网络匹配。

我研究了如何使用wmic path Win32_NetworkAdapter,我认为我已经找到了方法,请参见这里:

for /f "tokens=*" %%f in ('wmic /node:MYPC path WIN32_NetworkAdapter where "GUID is not null" get GUID /value ^| find "="') do set "%%f"

reg query "\\MYPC\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\%GUID%" /v Category 

我曾试图使用wmic命令找到当前活动网络的ID,使用wmic path WIN32_NetworkAdapter作为一个名为GUID的关键字,因为它与上面指定的注册表路径中所看到的网络ID具有完全相同的格式。

由于我只有一个活动网络,上述wmic命令仅返回一个非空的GUID。但是我在网络配置文件列表中没有找到返回的GUID...

如果我能找到一种确定该注册表路径中哪个子键/网络ID对应于我的活动网络的方法,那么我就可以得到我想要的结果。

如何找出当前正在使用的网络配置文件?


在我的情况下,NetConnectionStatus并不是很重要,因为我将要检查的机器肯定没有无线网卡。大多数情况下,我只需要从我指定的注册表路径中找到正在使用的GUID即可。 - Nolanr
1个回答

3

参考提取网络配置文件并在 txt 文件中仅显示网络配置文件说明

你可以尝试以下代码:

@echo off
Title GET GUID NETWORK PROFILES
Mode 70,5 & color 0A
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
REM  --> Check for permissions
Reg query "HKU\S-1-5-19\Environment" >nul 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO              **************************************
ECHO               Running Admin shell... Please wait...
ECHO              **************************************

    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
::::::::::::::::::::::::::::
::          START         ::
::::::::::::::::::::::::::::
Mode 90,20 & color 0A
SetLocal EnableExtensions DisableDelayedExpansion
(Set k=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles)
For /F "Delims==" %%A In ('Set GUID[ 2^>Nul') Do Set "%%A="
Set "i=101"
For /F "Tokens=1,2*" %%A In ('Reg Query "%k%" /S /V Description') Do (
    If "%%~nB" NEQ "%%~B" (
        Call Set "GUID[%%i:*1=%%]=%%~nB"
    ) Else (
        Call Call Set GUID[%%i:*1=%%]="%%%%GUID[%%i:*1=%%]%%%%","%%C"
        Set/A i+=1
    )
)
If %i% NEQ 101 (Set GUID[) |findstr /r "{[ABCDEF0123456789][ABCDEF0123456789-][ABCDEF0123456789-]*" 
If %i% NEQ 101 (>"%~dp0NetProfs.txt" 2>Nul Set GUID[ |findstr /r "{[ABCDEF0123456789][ABCDEF0123456789-][ABCDEF0123456789-]*")
EndLocal
pause & exit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接