获取网络连接 GUID

获取网络连接 GUID

简而言之:我需要一种从批处理文件中查找网络连接“xyz”的 UUID 的方法。

我正在尝试设置一个脚本,该脚本将为当前用户设置计划任务。我打算将此脚本发送给多个人,因此需要它是全自动的。此任务仅在连接到特定网络时运行。

我做了什么:

  • 创建我想要的任务Task Scheduler并将其导出,以将其用作我想要使用脚本导入的任务的模板。
  • 设置脚本以用用户特定的详细信息替换模板中的某些值。

我遇到的问题是,在设置时找不到任务调度程序使用的 UUID Start only if the following network connection is availiable。据我发现,这与网络接口 UUID 不同。此选项的导出 XML 文件如下所示:

<NetworkSettings>
  <Name>AndoidAP</Name>
  <Id>{some-random-UUID-here}</Id>
</NetworkSettings>

在示例中,我使用了 AndroidAP,这是一种无线设备。实际情况是有线连接。不知道这有什么区别吗?

调度程序 GUI

任何帮助或建议都将不胜感激!

答案1

您的要求

因此,本质上,你有一个仅当满足某些条件时才运行的任务真的

  1. 仅当连接到特定网络时才必须运行该过程
  2. 仅当特定文件共享可用时才必须运行该过程

可能

你可以用一些如果逻辑并简单地检查条件的状态并采取相应的行动是否“退出处理“ 或者 ”继续处理“其余的定义逻辑。

本质上,这将...

  1. ping通过 IP 地址指定的默认网关
  2. 检查ARP缓存MAC地址默认网关通过管道传输到查找字符串
    • 如果 MAC 地址是不是然后发现EXIT
    • 如果找到 MAC 地址,则继续处理
  3. 检查 UNC 共享是否存在
    • 如果 UNC 份额不是那么存在EXIT
    • 如果 UNC 共享确实存在,则继续处理 即其余逻辑

先决条件

  1. ipconfig从命令中获取默认网关的 IPv4 地址

    在此处输入图片描述

  2. 根据默认网关的IP地址获取物理Mac地址

    • ping针对默认网关的 IP 地址运行命令
    • 运行arp -a命令并记下Physical Address具有匹配值的默认网关的 IP 地址

    在此处输入图片描述


批处理脚本

显然GatewayIP=,、GWMacAddr=FolderShr=变量值需要设置为准确的值才能使其按预期工作——我已从我的角度进行测试并确认它确实如此。

@ECHO ON 

SET GatewayIP=192.168.1.254
SET GWMacAddr=e1-c3-5b-ed-4d-61
SET FolderShr=\\machinename\sharename

ping -n 02 %GatewayIP%
arp -a | findstr /c:"%GWMacAddr%"

IF NOT %ERRORLEVEL%==0 EXIT
IF NOT EXIST "%FolderShr%" EXIT

<Rest of batch logic here since both checks above passed>
EXIT


更多资源

答案2

获取网络连接 GUID

这将获取给定网络名称的 GUID。由于 GUID 对于每台计算机都是唯一的,因此此 GUID 不是网络的 GUID,而是计算机用于识别网络的唯一标识符。我目前不知道 Windows 用于识别网络的标准,但目前这满足了我的需求。就我而言,不需要提示,因为网络名称是常量(仅当公司更改名称时才会更改)。

这样做的目的是:

  1. 创建一些临时文件夹。
  2. 询问用户网络名称。当前网络名称可在此处找到:在此处查看网络名称
  3. 获取包含网络名称的日志条目。
  4. 创建一个 VBS 脚本。
  5. 运行 VBS 脚本,从日志条目中提取 GUID 并显示带有 GUID 的弹出窗口。
  6. 清理临时文件和文件夹。

更新:哈哈。忘记粘贴脚本了。下面开始:

脚本:

@ECHO OFF
CLS

REM Make temp folder to place temporary files in
    IF NOT EXIST "%tmp%\TKH\Mirror_Folders" MD "%tmp%\TKH\Mirror_Folders"

REM Ask user for name of network to find GUID for
    ECHO wscript.echo inputbox(WScript.Arguments(0),WScript.Arguments(1)) >"%tmp%\TKH\Mirror_Folders\NetworkName.vbs"
    FOR /f "tokens=* delims=" %%a IN ('cscript //nologo "%tmp%\TKH\Mirror_Folders\NetworkName.vbs" "Enter the name of the network" "Select network"') DO SET NetworkToSearchFor=%%a

REM Add 'Name'> to %NetworkToSearchFor% to filter out false results
SET SearchString="'Name'^^^>%NetworkToSearchFor%"

REM Get log entry for networkname
FOR /f "delims=" %%i IN ('wevtutil qe Microsoft-Windows-NetworkProfile/Operational /q:"Event[System[(EventID=10000)]]" /c:100 /rd:true /f:xml ^| FINDSTR /R "%SearchString%"') DO (
ECHO %%i>>"%tmp%\TKH\Mirror_Folders\Log entries.txt"
)
REM Make VBS-script to get GUID
(
    ECHO.   'Creates local variables
    ECHO.       Private Arg, objInputFile, tmpStr
    ECHO.   'Populate array with arguments
    ECHO.       'Arg^(0^): filepath^+filename
    ECHO.       Set Arg = WScript.Arguments
    ECHO.
    ECHO.   Set objInputFile = CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^(Arg^(0^)^)
    ECHO.   tmpStr = objInputFile.ReadLine
    ECHO.
    ECHO.   FirstCharacterToGet = InStr^(tmpStr, "<Data Name='Guid'>"^)^+18
    ECHO.   NumberOfCharactersToGet = 38
    ECHO.   GUID = mid^(tmpStr, FirstCharacterToGet, NumberOfCharactersToGet^)
    ECHO.   WScript.Echo GUID
)>"%tmp%\TKH\Mirror_Folders\Get GUID.vbs"

REM Call VBS-script to get GUID
    FOR /F "usebackq tokens=*" %%r in (`CSCRIPT "%tmp%\TKH\Mirror_Folders\Get GUID.vbs" "%tmp%\TKH\Mirror_Folders\Log entries.txt"`) DO SET GUID=%%r
    ECHO %GUID%
    mshta "javascript:alert('Your networks GUID is:\n%GUID%');close()"

REM Clean up
    RD /Q /S "%tmp%\TKH\

将其保存为“get GUID.cmd”

相关内容