简而言之:我需要一种从批处理文件中查找网络连接“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,这是一种无线设备。实际情况是有线连接。不知道这有什么区别吗?
任何帮助或建议都将不胜感激!
答案1
您的要求
因此,本质上,你有一个仅当满足某些条件时才运行的任务真的:
- 仅当连接到特定网络时才必须运行该过程
- 仅当特定文件共享可用时才必须运行该过程
可能
你可以用一些如果逻辑并简单地检查条件的状态并采取相应的行动是否“退出处理“ 或者 ”继续处理“其余的定义逻辑。
本质上,这将...
先决条件
ipconfig
从命令中获取默认网关的 IPv4 地址根据默认网关的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 用于识别网络的标准,但目前这满足了我的需求。就我而言,不需要提示,因为网络名称是常量(仅当公司更改名称时才会更改)。
这样做的目的是:
- 创建一些临时文件夹。
- 询问用户网络名称。当前网络名称可在此处找到:
- 获取包含网络名称的日志条目。
- 创建一个 VBS 脚本。
- 运行 VBS 脚本,从日志条目中提取 GUID 并显示带有 GUID 的弹出窗口。
- 清理临时文件和文件夹。
更新:哈哈。忘记粘贴脚本了。下面开始:
脚本:
@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”