none
Script Baseado em Faixa de rede RRS feed

  • Pergunta

  • Ola amigos,

    Eu estou tentando encontrar na net um script que tome ações baseada na faixa de ip do computador.
    Por exemplo:

    se computador tem ip 192.168.10. execute bat1
    se computadro tem ip 192.168.11. execute bat2
    se computador tem ip 192.168.12 execute bat3

    Encontrei o seguinte script, mas não funcionou
    http://www.tek-tips.com/faqs.cfm?fid=5908


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    quinta-feira, 12 de novembro de 2009 11:35

Respostas

  • Obrigado Marcellus,

    Mas ainda nao consegui colocar em produção. No terminal o script retorna  a mensagem echo corretamente.
    NUma maquina XP ele simplesmente não faz nada, não retorna erro, e nem chama o bat no compartilhamento.

    O script funciona em maquinas com ip fixo?
    se a maquina tiver duas interfaces com faixas de rede diferente, o script vai funcionar?


    Obrigado


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    • Marcado como Resposta Adriano Neiva quinta-feira, 12 de novembro de 2009 16:14
    quinta-feira, 12 de novembro de 2009 14:26
  • Obrigado Marcellus,

    Funcionou perfeitamente para o XP.

    agora vou pensar uma estratégia para as maquinas vista e windows 7. Ja que para essas maquinas gera um erro em wLan = split(Ip, ".", -1, 0)


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    • Marcado como Resposta Adriano Neiva quinta-feira, 12 de novembro de 2009 17:32
    quinta-feira, 12 de novembro de 2009 16:16

Todas as Respostas

  • Adriano, bom dia. 

    Não sei sua real necessidade porém acredito que esse tipo de verificação poderia ser feito de outra forma. Por GPO, pelo grupo do usuário, até poque imagina se tivesse mais de 1000 maquinas com VLANS. Você teria que inserir IP por ip dos 1000 terminais.

    mas....

    Segue Script conforme pedido.

    Lembrando que em maquinas com windows7, Vista ou que possuam o protocolo do IPV6 ele da preferencia de busca pelo IP do IPV6.


    '=============INICIO DO CODIGO
    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    'Obtem o IP que está em uso.

    Dim strProperties, CompNET, IPConfig, Ip, FSO, Arq, i
    strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
    Set CompNET = objwmiservice.execquery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For Each IPConfig In compnet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
      Ip = IPConfig.IPAddress(i)
    Next
    End If
    Next

    'Executa de acordo com o IP que está na maquina.

    Select Case IP

    Case "192.168.0.152"

    wscript.echo "Teste"

    Case "192.168.0.155"

    Wscript.echo "Teste2"

    Case "fe80::61c0:bc4d:a5ef:6d64"

    Wscript.echo "teste3"

    End Select
    '=====================FIM DO CODIGO




    Caso tenha alguma duvida, poste ae.

    []s,





    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 12:57
  • Na verdade eu tenho o seguinte cenario:
    TEnho o Microsoft Forefront security client como antivirus da rede. O wsus faz a atualizacao do antivirus.

    através de script de logon criei uma tarefa agendada que roda todo dia 12:30, esta tarefa forca a atualizacao manual do antivirus buscando um arquivo de 45MB em um compartilhamento. O problema que como temos escritorios em localidades diferentes, acontece muito de usuarios ambulantes buscar este arquivo de 45 mb em servidores que não estão na rede local onde estes se encontram.

    Por isso pensei em um scrito que rodasse 12:30, independente se o usuario faz parte ou nao daquele escritorio, o script iria pegar como referencia o ipo disponibilizado pelo dhcp local, ou seja e sempre direcionar a atualizacao do antivirus apontando para o servidor local.

    vou testar o script e posto aqui

    Abraço

    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    quinta-feira, 12 de novembro de 2009 13:03
  • O script não gerou nenhum resultado. rodo e nao acontece nada

    estou procurando um script que valide a faixa de ip e nao o ip especifico.
    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    quinta-feira, 12 de novembro de 2009 13:07
  • O script não gerou nenhum resultado. rodo e nao acontece nada

    estou procurando um script que valide a faixa de ip e nao o ip especifico.
    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)


    Fiz as alterações....
    Teste agora e nos retorne.
    Lembrando apenas que o IP está direcionado para o IPV4. Tanto que na função SPLIT, o delimitador é "."


    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")


    Dim strProperties, CompNET, IPConfig, Ip, FSO, Arq, i
    strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
    Set CompNET = objwmiservice.execquery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For Each IPConfig In compnet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
      Ip = IPConfig.IPAddress(i)
    Next
    End If
    Next

    wLan = split(Ip, ".", -1, 0)

    'apenas verificando a VLan que vc está
    wscript.echo wLan(3)

    'Inicio Fun case
    Select Case wLan(3)

    Case "10"

    wscript.echo "Teste"

    Case "11"

    Wscript.echo "Teste2"

    Case "12"

    Wscript.echo "teste3"

    End Select


    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 13:29
  • Quando eu executo, retorna a mensagem echo "2"

    o que eu procuro exatamente

    se o computador tiver o ip com a rede 10.55.40 execute \\server\share\file.bat
    se o computador tiver o ip com a rede 10.55.41 execute \\server\share\file2bat
    se o computador tiver o ip com a rede 10.55.42 execute \\server\share\file3bat


    Obrigado pela ajuda


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    quinta-feira, 12 de novembro de 2009 13:37
  • Quando eu executo, retorna a mensagem echo "2"

    o que eu procuro exatamente

    se o computador tiver o ip com a rede 10.55.40 execute \\server\share\file.bat
    se o computador tiver o ip com a rede 10.55.41 execute \\server\share\file2bat
    se o computador tiver o ip com a rede 10.55.42 execute \\server\share\file3bat


    Obrigado pela ajuda


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)

    Exato,
    Quando ele retornou "2", identificamos que a sua VLan é 2.


    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Dim strProperties, CompNET, IPConfig, Ip, FSO, Arq, i
    strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
    Set CompNET = objwmiservice.execquery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For Each IPConfig In compnet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
      Ip = IPConfig.IPAddress(i)
    Next
    End If
    Next

    wLan = split(Ip, ".", -1, 0)

    'apenas verificando a VLan que vc está
    'wscript.echo wLan(3) 'Aqui a resposta da VLAN


    'Inicio Fun case
    Select Case wLan(3)

    'Colocarei esse case caso vc teste em seu terminal
    Case "2"
    wscript.echo "Meu terminal possui vLan2 e IP" &IP
    Case "40"
    WshShell.Run ("\\server\share\file.bat")
    Case "41"
    WshShell.Run ("\\server\share\file1.bat")
    Case "42"
    WshShell.Run (\\server\share\file2.bat)

    End Select

    Teste e retorne...

    []s,


    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 13:54
  • Quando eu executo, retorna a mensagem echo "2"

    o que eu procuro exatamente

    se o computador tiver o ip com a rede 10.55.40 execute \\server\share\file.bat
    se o computador tiver o ip com a rede 10.55.41 execute \\server\share\file2bat
    se o computador tiver o ip com a rede 10.55.42 execute \\server\share\file3bat


    Obrigado pela ajuda


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)

    Apenas explicando.

    A função SPLIT pega transforma o valor em array pegando o intervalo entre o valor informado. Ou seja quando eu tenho a linha:

    wLan = split(Ip, ".", -1, 0)

    Pego os valores entre o "."

    Ip = 10.55.2.XX

    No meu echo eu utilizei:

    Wscript.echo wlan(3), que seria o 3 valor da ARRAY que eu criei. Contudo é exatamente o valor da VLAN. Foi necessário apenas alterar os parametros do "CASE" para os valores que vc queria conforme ficou no script.

    Você poderá ler mais sobre script em: http://technet.microsoft.com/en-us/scriptcenter/default.aspx

    []s,

    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 13:57
  • Obrigado Marcellus,

    Mas ainda nao consegui colocar em produção. No terminal o script retorna  a mensagem echo corretamente.
    NUma maquina XP ele simplesmente não faz nada, não retorna erro, e nem chama o bat no compartilhamento.

    O script funciona em maquinas com ip fixo?
    se a maquina tiver duas interfaces com faixas de rede diferente, o script vai funcionar?


    Obrigado


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    • Marcado como Resposta Adriano Neiva quinta-feira, 12 de novembro de 2009 16:14
    quinta-feira, 12 de novembro de 2009 14:26
  • Obrigado Marcellus,

    Mas ainda nao consegui colocar em produção. No terminal o script retorna  a mensagem echo corretamente.
    NUma maquina XP ele simplesmente não faz nada, não retorna erro, e nem chama o bat no compartilhamento.

    O script funciona em maquinas com ip fixo?
    se a maquina tiver duas interfaces com faixas de rede diferente, o script vai funcionar?


    Obrigado


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)


    Adriano, boa tarde.

    1 - sim, deveria. A condição de execução do script fica preso somente em caso do IP NULO, por esse motivo a linha.
    If Not IsNull(IPConfig.IPAddress) Then


    Em caso de 2 interfaces, ele valida as 2 VLAN


    Segue novo modelo de script.

    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Dim strProperties, CompNET, IPConfig, Ip, FSO, Arq, i
    strProperties = "Description, MACAddress, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, DNSDomain, DNSDomainSuffixSearchOrder, DHCPEnabled, DHCPServer, WINSPrimaryServer, WINSSecondaryServer, ServiceName"
    Set CompNET = objwmiservice.execquery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    For Each IPConfig In compnet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
      Ip = IPConfig.IPAddress(i)
     
    SelectIP(IP)


    Next
    End If
    Next

     

    function SelectIP(objIP)

    wLan = split(Ip, ".", -1, 0)

    Select Case wLan(2)


    'Colocarei esse case caso vc teste em seu terminal
    Case "40"
    WshShell.Run ("\\server\share\file.bat")
    Case "41"
    WshShell.Run ("\\server\share\file1.bat")
    Case "42"
    WshShell.Run ("\\server\share\file2.bat")


    End Select

    End function



    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 15:41
  • Obrigado Marcellus,

    Funcionou perfeitamente para o XP.

    agora vou pensar uma estratégia para as maquinas vista e windows 7. Ja que para essas maquinas gera um erro em wLan = split(Ip, ".", -1, 0)


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    • Marcado como Resposta Adriano Neiva quinta-feira, 12 de novembro de 2009 17:32
    quinta-feira, 12 de novembro de 2009 16:16
  • Adriano, seria interessante vc marcar o POST com a resposta correta.

    Quanto as maquinas com windows VISTA/Windows7, atualmente eles tb pegam o IPV4.(testei em meu terminal WINDOWS7)
     
    É necessário vc colocar no início do script a mensagem:

    On error resume next

    que quando ele validar o IPV6 e der o erro ele ignora e continua a execução, podendo assim utilizar em windows Vista / 7

    []s,

    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 12 de novembro de 2009 16:19
  • ok, eu ja havia marcado como resposta, funcionou perfeitamente para xp, obrigado
    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL (mcsamcse@blogspot.com)
    quinta-feira, 12 de novembro de 2009 17:33
  • olá, estou precisando de algo parecido, no meu caso os mapeamentos só devem ser executados se a estação estiver em um determinado range de ip (de 10.0.244.1 a 10.0.247.252), qualquer outro ip os mapeamentos não devem ser feitos.

    Alguem poderia me ajudar?

     

    terça-feira, 25 de maio de 2010 14:52
  • re-lí o tópico com mais calma, é exatamente isso o q preciso, só algumas alterações, já conseguí fazer.

    mesmo assim, obrigado!

    terça-feira, 25 de maio de 2010 15:51