Batch-scripting: obter conexão de rede UUID

1

Em suma: O que eu preciso é uma maneira de encontrar UUID da conexão de rede "xyz" de um arquivo em lotes.

Estou tentando configurar um script que colocará uma tarefa agendada no usuário atual. Pretendo enviar este script para várias pessoas e, portanto, preciso que ele seja totalmente automático. Esta tarefa deve ser executada somente quando conectada a uma rede específica.

O que eu fiz:

  • Criei a tarefa desejada em Task Scheduler e a exportei para usá-la como um modelo para a tarefa que desejo importar com o script.
  • Defina o script para substituir determinados valores no modelo por detalhes específicos do usuário.

O problema que tenho é encontrar o UUID que o agendador de tarefas usa ao definir Start only if the following network connection is availiable . Pelo que eu descobri, este não é o mesmo UUID que o UUID da interface de rede. O arquivo XML exportado para esta opção é assim:

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

No exemplo, usei o AndroidAP, que seria um dispositivo sem fio. O caso real seria uma conexão com fio. Não sabe se isso faz alguma diferença?

Qualquer ajuda ou sugestão seria muito apreciada!

    
por Klinghust 21.09.2017 / 13:12

2 respostas

0

Obter o GUID da ligação de rede

Isso obterá o GUID de um determinado nome de rede. Como o GUID é exclusivo para todos os computadores, esse GUID não é o GUID da rede, mas sim o identificador exclusivo que o computador usa para identificar a rede. Atualmente não tenho conhecimento dos critérios que o Windows usa para identificar a rede, mas no momento isso satisfaz minhas necessidades.No meu caso, o prompt não seria necessário, pois o nome da rede é uma constante (só muda quando / se a empresa muda o nome ).

O que isto faz é:

  1. Cria algumas pastas temporárias.
  2. Peça ao usuário o nome da rede. O nome atual da rede pode ser encontrado aqui:
  3. Obtenhaentradasderegistrocontendoonomedarede.
  4. CriaumscriptVBS.
  5. ExecutaoscriptVBSqueextrairáoGUIDdasentradasdelogemostraráumpop-upcomoGUID.
  6. Limpararquivosepastastemporários.

Atualização:Rimuito.Esqueceudecolaroscript.Aquivamosnós:

Script:

@ECHOOFFCLSREMMaketempfoldertoplacetemporaryfilesinIFNOTEXIST"%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\

Salve isso como "get GUID.cmd"

    
por 06.10.2017 / 23:58
1

Seus requisitos

Então, basicamente, você tem uma tarefa que deseja executar apenas se determinadas condições forem TRUE :

  1. O processo deve ser executado somente se conectado a uma rede específica
  2. O processo deve ser executado somente se um compartilhamento de arquivo específico estiver disponível

Potencialmente

Você pode usar alguma IF lógica e simplesmente verificar o status das condições e tomar as medidas necessárias para " > processamento de saída "ou" continue processando "o restante da lógica definida.

Essentially, this will. . .

  1. ping the default gateway via its IP address
  2. check the arp cache for the MAC address of the default gateway piped to FindStr
    • If the MAC address is not found then EXIT
    • If the MAC address is found then keep processing
  3. check if the UNC share exists
    • If the UNC share does not exist then EXIT
    • If the UNC share does exist then keep processing i.e. the rest of the logic

Pré-requisitos

  1. Obtenha o endereço IPv4 do gateway padrão do comando ipconfig

  2. ObtenhaoendereçofísicodoMacapartirdoendereçoIPdogatewaypadrão

    • ExecuteumcomandopingnoendereçoIPdogatewaypadrão
    • Executeumcomandoarp-aeobserveoPhysicalAddressquetemumendereçoIPdevalorcorrespondentedogatewaypadrão

Scriptemlote

Obviamente,osvaloresdavariávelGatewayIP=,GWMacAddr=eFolderShr=precisamserdefinidoscomvaloresprecisosparaqueissofuncioneconformeoesperado-testeieconfirmeioresultadodomeulado.

@ECHOONSETGatewayIP=192.168.1.254SETGWMacAddr=e1-c3-5b-ed-4d-61SETFolderShr=\machinename\sharenameping-n02%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

Mais recursos

por 02.10.2017 / 01:47