none
Script para importar reservas DHCP RRS feed

  • Pergunta

  • Olá amigos, boa tarde!

    Aqui na Empresa, temos um servidor Linux que trabalha como DHCP, porém, vamos desativa-lo. Temos um arquivo .conf com várias reservas configuradas para algumas maquinas da Empresa.
    Preciso configurar essas reservas no Server 2008, como estava no Linux.

    Gostaria de saber se existe algum script que eu posso criar, para fazer essas configurações. São por volta de 200 reservas...

    No script do linux, já tem o nome das maquinas, MAC e IP.

    Há alguma solução mais pratica do que configurar as reservas na mão???

    Abraços e obrigado

    MCP / MCDST / MCSA
    Tudo posso naquele que me fortalece!
    • Movido Jesiel S. Pereira sexta-feira, 29 de janeiro de 2010 18:28 Movendo para o fórum correto (De:Windows Server 2008)
    sexta-feira, 29 de janeiro de 2010 17:47

Respostas

  • Ola Ismael, não consegui testar mas é algo nesse sentido, amanha ao chegar na empresa eu testo para você se tiver algum erro ja atualizo ok.
    Lembrando na primeira linha na coluna um coloque o numer 1 na coluna 2 o numero 2 na 3 o numero 3.

    Para que o script saiba qual coluna ler.

     

    ' ------------------------------------------------------'
    Option Explicit
    Dim oShell, objExcel, objSpread, intRow, strSheet, strValue, WshShell, strMAC, strIP 
    
    ' -------------------------------------------------------------'
    
    ' -------------------------------------------------------------'
    
    Set oShell = CreateObject("WScript.Shell") 
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    strSheet = oShell.CurrentDirectory & "\Arquivo.xls"
    
    ' Open the Excel spreadsheet
    Set objExcel = CreateObject("Excel.Application")
    Set objSpread = objExcel.Workbooks.Open(strSheet)
    intRow = 1 'Row 1 often contains headings
    
    
    ' Here is the 'DO...Loop' that cycles through the cells
    ' Note intRow, x must correspond to the column in strSheet
    Do Until objExcel.Cells(intRow,1).Value = " " 
     strName = Trim(objExcel.Cells(intRow, 1).Value)
     strMAC = Trim(objExcel.Cells(intRow, 2).Value)
     strIP = Trim(objExcel.Cells(intRow, 3).Value)
     
     WshShell.Run "cmd /c netsh DHCP server scope 192.168.0.0 add reservedip "&strIP&" "&strMAC&" "&strName&""" 
    
    intRow = intRow + 1
    
    Loop
    
    objExcel.Quit 
    

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 25 de agosto de 2011 01:10

Todas as Respostas

  • Olá,

    Vou redirecionar para a sessão de scripts para você encontrar a resposta mais rápido.

    Até mais,

    Jesiel
    sexta-feira, 29 de janeiro de 2010 18:27
  • Opa Jesiel!

    Obrigado! Abraços!
    MCP / MCDST / MCSA
    Tudo posso naquele que me fortalece!
    sexta-feira, 29 de janeiro de 2010 18:35
  • Olá,

    Marcelo, você pode postar uma linha do arquivo que você tem do linux?

    Pode colocar valores ficticios. É apenas para tratamento do arquivo.

    Te adianto que o comando para adicionar um reservation é:

    netsh Dhcp Server "ipdoserver" Scope "rangedoscopo" Add reservedip "ipreservado" "macaddress" "nomedareserva"

    Agora, você postando seu arquivo, tentaremos criar um script que varre o arquivo pega as posições e executa o comando acima.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    sexta-feira, 29 de janeiro de 2010 19:18
  • Olá Jesiel! Obrigado pela ajuda!

    Segue uma parte do arquivo:

    #######################################   GPD   #######################################
            
               
            host NOMEDAMAQUINA1 { # NOMEDARESERVA
                    hardware ethernet 00:18:F3:B4:0B:10;
                    fixed-address 192.168.1.254;
            }
            host NOMEDAMAQUINA2 { # NOMEDARESERVA
                    hardware ethernet 00:19:D2:7F:69:D1;
                    fixed-address 192.168.1.252;
            }

    Tenho mais ou menos 200 registros de reserva!

    É interessante criar uma BAT com o comando netsh?

    Abraço!
    MCP / MCDST / MCSA
    Tudo posso naquele que me fortalece!
    sábado, 30 de janeiro de 2010 12:32
  • Olá,

    Vamos lá: Primeiro faça o seguinte:

    Salve o seu arquivo dhcpd.conf (somente a parte do reservations, igual o exemplo que você me passou acima)

    Salve em c:\dhcp\dhcpd.conf


    Altere as variaveis do script abaixo para o escopo correto e o ip do servidor correto:


    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo txt
    Set objTextFile = objFSO.OpenTextFile("C:\dhcp\dhcpd.conf",ForReading)
    Set WSHShell = WScript.CreateObject("WScript.Shell")

    arrDHCP = array(0)
    strComumNOME = "{ #"
    strComumMAC = "hardware ethernet "
    strComumIP = "fixed-address "

    'coloque o range do escopo que está testando
    strRANGE = "192.168.0.0"
    'COLOQUE O IP DO SERVIDOR DHCP
    strSERVER = "192.168.0.1"

    j = 0

    strLinha = ""

    Do While objTextFile.AtEndOfStream <> True
        'aqui é a linha que está lendo
        nome = objTextFile.ReadLine
        if instr(nome,strComumNOME) > 0 Then
        valini = instr(nome,strComumNOME)
        strLinha = strLinha & TRIM(MID(nome,valini + Len(strComumNOME),Len(nome))) & "/"
        Elseif instr(nome,strComumMAC) > 0 Then
        valini = instr(nome,strComumMAC)
        valfim = instr(nome,";")
        strVal = TRIM(MID(nome,valini + Len(strComumMAC),valfim))
        strLinha = strLinha & MID(strVal,1,Len(strVal)-1) & "/"
        Elseif instr(nome,strComumIP) > 0 Then
        valfim = instr(nome,";")
        valini = instr(nome,strComumIP)
        strVal = TRIM(MID(nome,valini + Len(strComumIP),valfim))
        arrDHCP(UBOUND(arrDHCP)) = strLinha & MID(strVal,1,Len(strVal)-1)
            redim preserve arrDHCP(UBOUND(arrDHCP) + 1)
        strLinha = ""
        End if
    Loop

    For x = 0 to UBOUND(arrDHCP)
        arrLinha = Split(arrDHCP(x),"/")

        if UBOUND(arrLinha) = 2 Then
            strHOST = arrLinha(0)
            strMAC = arrLinha(1)

            'limpando os 2 pontos do mac porque o windows não aceita
            strNewMAC = ""
            For z = 1 to Len(strMac)
                if MID(strMac,z,1) <> ":" Then
                    strNewMac = strNewMac & lcase(MiD(strMac,z,1))
                End if
            Next
            strIP = arrLinha(2)   
            wscript.echo "ADICIONANDO RESERVA PARA IP " & strIP & " HOST : " & strHOST & " MAC " & strNewMAC
            strcomando =  "netsh Dhcp Server " & strSERVER & " Scope " & strRANGE & " Add reservedip " & strIP & " " & strNewMAC & " " & strHOST
            WSHShell.run strComando
        End if


    Next



    Faça os testes e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    • Marcado como Resposta Jesiel S. Pereira terça-feira, 16 de fevereiro de 2010 10:49
    • Não Marcado como Resposta Marcelo C. Medeiros terça-feira, 2 de março de 2010 12:31
    • Sugerido como Resposta Ismael Pereira quarta-feira, 24 de agosto de 2011 18:04
    quinta-feira, 4 de fevereiro de 2010 12:55
  • Jesiel, tudo bem???

    Rodei seu script, ele dá a mensagem, mas não aparece a reserva no console DHCP e nem a máquina pega esse endereço. Tentei rodar o comando netsh e ele diz que precisa de um scopo válido... mas já coloquei o scopo correto que no meu caso é um privado 192.168.30.0.

    Alguma idéia???

    Abraço
    MCP / MCDST / MCSA
    Tudo posso naquele que me fortalece!
    terça-feira, 2 de março de 2010 12:30
  • Olá,

    Você está executando no servidor DHCP?
    O usuário tem permissão para adicionar reserva?

    Se você executar o comando:

    netsh DHCP server scope 192.168.30.0 add reservedip 192.168.30.100 001E0BDAE564

    Oque acontece?


    Verifique o escopo com o comando:

    netsh DHCP server show scope


    Eu testei aqui e funcionou... O script deveria funcionar...



    Até mais,

    Jesiel

    Obs.: Se útil, classifique



    quarta-feira, 3 de março de 2010 16:49
  • Olá Jesiel 

     

    Estou com mesmo problema do nosso colega Marcelo, copie o seu script e fiz um arquivo dhcpd.conf igual ao do Marcelo  e apareceu a mesma mensagem de script executado com sucesso !!! Porém o endereço não foi cadastrado, o que será pode estar dando errado ? 

     

    Executei o comando netsh DHCP server scope 192.168.30.0 add reservedip 192.168.30.100 001E0BDAE564 , usando os parametros da minha rede e consegui fazer a reserva normalmente. 

     

    Obrigado 


    terça-feira, 6 de abril de 2010 14:07
  • Estava Procurando isso a um tempo...e estava com o mesmo erro.

    No caso do 2008 server, tive que executar tanto a VBS quanto o CMD com o modo Administrador.

    Funcionou corretamente.

    Mas no caso vejam se podem me ajudar. O formato que possuo é em csv (em colunas) como abaixo:

    NomeMicro     MacAdrress         IP

    XXxxxyyye     001b45879045   10.221.171.40

    Já tentei alterar a vbs acima e não consegui. Podem me dar uma luz.

     

    quarta-feira, 24 de agosto de 2011 18:04
  • Ola Ismael, não consegui testar mas é algo nesse sentido, amanha ao chegar na empresa eu testo para você se tiver algum erro ja atualizo ok.
    Lembrando na primeira linha na coluna um coloque o numer 1 na coluna 2 o numero 2 na 3 o numero 3.

    Para que o script saiba qual coluna ler.

     

    ' ------------------------------------------------------'
    Option Explicit
    Dim oShell, objExcel, objSpread, intRow, strSheet, strValue, WshShell, strMAC, strIP 
    
    ' -------------------------------------------------------------'
    
    ' -------------------------------------------------------------'
    
    Set oShell = CreateObject("WScript.Shell") 
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    strSheet = oShell.CurrentDirectory & "\Arquivo.xls"
    
    ' Open the Excel spreadsheet
    Set objExcel = CreateObject("Excel.Application")
    Set objSpread = objExcel.Workbooks.Open(strSheet)
    intRow = 1 'Row 1 often contains headings
    
    
    ' Here is the 'DO...Loop' that cycles through the cells
    ' Note intRow, x must correspond to the column in strSheet
    Do Until objExcel.Cells(intRow,1).Value = " " 
     strName = Trim(objExcel.Cells(intRow, 1).Value)
     strMAC = Trim(objExcel.Cells(intRow, 2).Value)
     strIP = Trim(objExcel.Cells(intRow, 3).Value)
     
     WshShell.Run "cmd /c netsh DHCP server scope 192.168.0.0 add reservedip "&strIP&" "&strMAC&" "&strName&""" 
    
    intRow = intRow + 1
    
    Loop
    
    objExcel.Quit 
    

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 25 de agosto de 2011 01:10
  • Olá Edson,

    Cara funcionou sim... Ótimo!

    Só um detalhe, parece que o Loop só termina quando as linhas do excel terminam, ou seja, demora muito para criar 10, 20, 30 amarrações pois a VBS só termina quando ele termina de procurar todas as linhas da planilha.

    quinta-feira, 25 de agosto de 2011 18:22
  • Ola Ismael,

    Ele faz até que o valor da coluna onde voce deixou como numero 1 seja vazio.

     

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 25 de agosto de 2011 19:07
  • Ola Ismael,

    Se a resposta for valida por favor vote como útil.

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 26 de agosto de 2011 12:10
  • Imaginei isso, mas não rolou. O Loop dele é "eterno", digamos assim.

    Tive que definir o número de linhas de acordo com a minha necessidade. Linhas abaixo.

    If intRow > 12 Then
             Exit Do
         End If

    O 12 no caso é o número de linhas que usarei na planilha. Assim funcionou.

    sexta-feira, 26 de agosto de 2011 17:24
  • Ola Ismael,

    Sua planilha ficou desta forma aqui

    1 2 3
    Xxxxxyyye 001b45879045   10.221.171.40
    Xxxxxyyye 001b45879045   10.221.171.40
    Xxxxxyyye 001b45879045   10.221.171.40
    Xxxxxyyye 001b45879045   10.221.171.40
    Xxxxxyyye 001b45879045   10.221.171.40


    Pois eu fiz os testes aqui e funcionou.

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 26 de agosto de 2011 17:35
  • Ficou dessa forma mesmo que vc colocou acima. A propósito, adicionei o item comentários... que também utilizava quando fazia manualemtne. Abaixo segue a VBS. Fiz algumas alterações que me atenderam. Pode ficar a vontade para verificar, meu amigo.

     

     

    ' ------------------------------------------------------'

    Option Explicit

    Dim oShell, objExcel, objSpread, intRow, strSheet, strValue, WshShell, strMAC, strIP, strName, strComment

    ' -------------------------------------------------------------'

    ' -------------------------------------------------------------'

    Set oShell = CreateObject("WScript.Shell") 

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

     

    strSheet = "C:\Users\ismael.pereira\Desktop\Arquivo.xls"

     

    ' VBS busca no excel

    Set objExcel = CreateObject("Excel.Application")

    Set objSpread = objExcel.Workbooks.Open(strSheet)

    intRow = 1 'Row 1 often contains headings

     

    ' adicionar a quantidade de linhas no item > then

    ' verificando a coluna intRow, x e a coluna correspondente

    Do Until objExcel.Cells(intRow,1).Value = " " 

     strName = Trim(objExcel.Cells(intRow, 1).Value)

     strMAC = Trim(objExcel.Cells(intRow, 2).Value)

     strIP = Trim(objExcel.Cells(intRow, 3).Value)

     strComment = Trim(objExcel.Cells(intRow, 4).Value)

     

     If intRow > 12 Then

             Exit Do

         End If 

     

     WshShell.Run "cmd /c netsh DHCP server scope 172.31.141.0 add reservedip "&strIP&" "&strMAC&" "&strName&" "&strComment&"" 

    intRow = intRow + 1

    Loop 

    objExcel.Quit 

     

     

     

    Abraços!!



    sexta-feira, 26 de agosto de 2011 18:31
  • Pelo que pude ver sua tabela nao tem o numero 1 2 3 isso é um indice para o script por isso que ele ficou em loop...


    Se tiver o indice não necessita da sua validação mas estou feliz por ter funcionado.

    Por favor marque as respostas certas para ajudar nosso sistema de busca.

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 26 de agosto de 2011 18:55
  • Não com certeza... Vc ajudou bastante.

    Mas o primeiro teste que fiz eu deixei a referencia numérica na coluna...Mas ótimo está OK.

    sexta-feira, 26 de agosto de 2011 19:30
  • Disponha... xD
    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 26 de agosto de 2011 23:07
  • Boa noite!!

    Edson e Ismael, estou com problemas ao rodar o script. 

    Ao rodar o script aparece a mensagem

    Alteração do contexto do escopo atual para 192.168.0.0 escopo.

    Falha de Scope Add RservedIP de Servidor DHCP.

    Parâmetro(s) passsado(s) incompleto(s) ou inválido(s).

    Estou rodando no Windows Server 2008 R2 PTB.

    Vocês podem me ajudar?


    • Editado Dudu Tavares sexta-feira, 7 de dezembro de 2012 00:28
    sexta-feira, 7 de dezembro de 2012 00:21