none
Problema ao executar NETSH de dentro de um VBS RRS feed

  • Pergunta

  • Boa Tarde Fábio, estou com o seguinte erro quando rodo o VBS, você pode me ajudar?

    Script

    Option Explicit
    
    Dim oShell, objExcel, objSpread, intRow, strSheet, strValue, WshShell, strMAC, strIP, strName, strComment
    dim strExecutar,objFSO,objFile,strLinha,arrLinha
    ' -------------------------------------------------------------'
    
    
    
    Set oShell = CreateObject("WScript.Shell")
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    strSheet = "C:\LOCAL\ARQUIVO.txt"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strSheet, 1)
     
    
    'Em qual linha começam os dados
    intRow = 1 'Row 1 often contains headings
    
    
    Do Until objFile.AtEndOfStream
    
    strLinha = objFile.ReadLine
    
    arrLinha = split(strLinha,";")
    
    strName = arrLinha(0)
    
    strMAC = arrLinha(1)
    
    strIP = arrLinha(2)
    
    strComment = arrLinha(3)
    
    
    If intRow > 3 Then
    
    Exit Do
    
    End If
    
    strExecutar = "cmd /k netsh DHCP server scope IP add reservedip " & strIP & " " & strMAC & " " & strName & " " & strComment & ""
    
    wscript.echo strExecutar
    
    WshShell.Run strExecutar
    
    intRow = intRow + 1
    
     Loop


    _________________________________________________________________________________________________________

    Mensagem do Prompt


    Changed the current scope context to IP scope.

    To reserve an IP address for a particular hardware address in the
    scope.

    Syntax:

            add reservedip <ReservedIP> <MAC_Address> [ClientName]
            [ClientComment] [ClientType(DHCP | BOOTP | BOTH)]

    Parameters:

            ReservedIP     - IP address to be reserved.

            MAC_Address    - Physical hardware or Media Access Control
                             (MAC) address to be associated with the IP
                             address to be reserved.

            ClientName     - Provides space for a client name associated
                             with this reserved client entry.

            ClientComment  - Provides space for a client comment
                             associated with this reserved client entry.

            ClientType     - Type of clients; DHCP(default), BOOTP, or
                             BOTH.

    Notes:         If any optional parameter is used, all parameters(mandatory
                   as well as optional) before that must be supplied in proper
                   sequence.

    Example:       add reservedip 10.2.2.32 08002b30369B

                   This command reserves the IP address 10.2.2.32 for use
                   by the client that identifies its MAC address as
                   08-00-2b-30-36-9b when obtaining a lease in the current
                   scope.

    DHCP Server Scope Add ReservedIP failed.

    Parameter(s) passed are either incomplete or invalid.


    • Dividir Fábio JrModerator quinta-feira, 29 de novembro de 2012 16:35 Aberto em tópico já encerrado
    • Editado Fábio JrModerator quinta-feira, 29 de novembro de 2012 16:36 formatação do código
    quinta-feira, 29 de novembro de 2012 16:26

Respostas

  • Usa este .bat que funciona:

    @ECHO OFF
    for /f "tokens=* delims=;" %%A IN (reservas.txt) do call :RESERVA %%A %%B %%C %%D
    GOTO :EOF
    
    :RESERVA
    	SET ESCOPO=%1
    	SET NOME=%2
    	SET IP=%3
    	SET MAC=%4
    
    	NETSH DHCP SERVER SCOPE %ESCOPO% ADD RESERVEDIP %IP% %MAC% %NOME%
    	
    	GOTO :EOF

    O arquivo reservas.txt deve ter este formato:

    10.0.0.0;IMPRESSORA01;10.0.0.9;000102030405
    10.0.0.0;IMPRESSORA02;10.0.0.10;101010202020

    <ESCOPO>;<NOME>;<IP DA RESERVA>;<MAC SEM TRAÇOS>


    Fábio de Paula Junior

    Testa esta batch, testei e funciona é só vc seguir o que pedi, se não funcionar post o seu arquivo reservas.txt.

    Fábio de Paula Junior

    • Marcado como Resposta Césinha sexta-feira, 30 de novembro de 2012 17:50
    sexta-feira, 30 de novembro de 2012 15:31
    Moderador

Todas as Respostas

  • LEIA ANTES DE PERGUNTAR: Como utilizar este fórum 

    social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/26727dcf-6fcd-4f6a-965c-b3952eb35365


    Fábio de Paula Junior

    quinta-feira, 29 de novembro de 2012 16:38
    Moderador
  • Césinha,

    O seu script nada mais faz do que montar uma linha de comando e executar, e ao que parece esta linha está faltando algum parametro.

    Quando vc executa este script ele imprime na tela os comandos que serão executados (wscript.echo strExecutar), faça o seguinte:

    Comente a linha abaixo (isso vai fazer com que as mensagems de erro não seja exibidas), é só colocar um apóstrofo no ínicio (')

    'WshShell.Run strExecutar

    Agora execute o seu script e envie a saída dele aqui pro fórum, devem aparecer várias linha com cmd /k netsh DHCP ...


    Fábio de Paula Junior

    quinta-feira, 29 de novembro de 2012 16:42
    Moderador
  • Fábio aparece a janela com a mensagem abaixo porém não add reserva.

    ---------------------------
    Windows Script Host
    ---------------------------
    cmd /k netsh DHCP server scope "IP" add reservedip 
    ---------------------------
    OK   
    ---------------------------

    quinta-feira, 29 de novembro de 2012 17:29
  • Manda também o seu 
    C:\LOCAL\ARQUIVO.txt

    Fábio de Paula Junior

    quinta-feira, 29 de novembro de 2012 17:44
    Moderador
  • Exemplo abaixo.

    Nome MAC IP

    RESERVADO;00-00-00-00-00-00;111.222.333.444

    quinta-feira, 29 de novembro de 2012 17:56
  • Exemplo abaixo.

    Nome MAC IP

    RESERVADO;00-00-00-00-00-00;111.222.333.444

    Fábio o escopo já está criado, devo apagar o mesmo para o Script criar ele também ou ele tem que estar criado mesmo?
    quinta-feira, 29 de novembro de 2012 17:59
  • Esse arquivo seu está errado, são 4 campos (nome, mac, ip e comentário).

    Para testes não execute dando dois cliques execute de dentro do prompt pra ficar mais fácil ler os logs.


    O script está certo, veja que criei o arquivo.txt com os dados que vc passou (precisei colocar a descrição também senão dá o erro visto na figura).

    Aé ele me mostrou o que ele está tentado executar.

    Pergunto: Este é o comando do NETSH para adicionar a reserva? 

    Tente fazer um comando NETSH que adicione a reserva e me passe um tela igual a que te passei e o comando correto.


    Fábio de Paula Junior


    quinta-feira, 29 de novembro de 2012 18:30
    Moderador
  • Já achei um erro no comando

     "cmd /k netsh DHCP server scope IP add reservedip

    Esse IP tem que ser substituido pelo IP do escopo, ou vc troca este IP pelo escopo ou coloca o escopo em cada linha do arquivo.txt (pode ser no campo descrição). aí a gente alterara esta linha para pegar o campo do arquivo.txt


    Fábio de Paula Junior

    quinta-feira, 29 de novembro de 2012 18:40
    Moderador
  • Usa este .bat que funciona:

    @ECHO OFF
    for /f "tokens=* delims=;" %%A IN (reservas.txt) do call :RESERVA %%A %%B %%C %%D
    GOTO :EOF
    
    :RESERVA
    	SET ESCOPO=%1
    	SET NOME=%2
    	SET IP=%3
    	SET MAC=%4
    
    	NETSH DHCP SERVER SCOPE %ESCOPO% ADD RESERVEDIP %IP% %MAC% %NOME%
    	
    	GOTO :EOF

    O arquivo reservas.txt deve ter este formato:

    10.0.0.0;IMPRESSORA01;10.0.0.9;000102030405
    10.0.0.0;IMPRESSORA02;10.0.0.10;101010202020

    <ESCOPO>;<NOME>;<IP DA RESERVA>;<MAC SEM TRAÇOS>


    Fábio de Paula Junior

    quinta-feira, 29 de novembro de 2012 19:54
    Moderador
  • Bom dia Fábio, coloquei IP apenas para não colocar o IP do meu server na rede...

    Vou realizar os testes solicitados e depois posto aqui...
    sexta-feira, 30 de novembro de 2012 09:34
  • Esse arquivo seu está errado, são 4 campos (nome, mac, ip e comentário).

    Para testes não execute dando dois cliques execute de dentro do prompt pra ficar mais fácil ler os logs.


    O script está certo, veja que criei o arquivo.txt com os dados que vc passou (precisei colocar a descrição também senão dá o erro visto na figura).

    Aé ele me mostrou o que ele está tentado executar.

    Pergunto: Este é o comando do NETSH para adicionar a reserva? 

    Tente fazer um comando NETSH que adicione a reserva e me passe um tela igual a que te passei e o comando correto.


    Fábio de Paula Junior


    Fábio segue mensagem do prompt:

    C:\>cscript DHCP.vbs
    Microsoft (R) Windows Script Host Version 5.6
    Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

    C:\DHCP.vbs(30, 2) Microsoft VBScrip
    t runtime error: Subscript out of range: '[number: 1]'


    C:\>

    sexta-feira, 30 de novembro de 2012 12:48
  • Usa este .bat que funciona:

    @ECHO OFF
    for /f "tokens=* delims=;" %%A IN (reservas.txt) do call :RESERVA %%A %%B %%C %%D
    GOTO :EOF
    
    :RESERVA
    	SET ESCOPO=%1
    	SET NOME=%2
    	SET IP=%3
    	SET MAC=%4
    
    	NETSH DHCP SERVER SCOPE %ESCOPO% ADD RESERVEDIP %IP% %MAC% %NOME%
    	
    	GOTO :EOF

    O arquivo reservas.txt deve ter este formato:

    10.0.0.0;IMPRESSORA01;10.0.0.9;000102030405
    10.0.0.0;IMPRESSORA02;10.0.0.10;101010202020

    <ESCOPO>;<NOME>;<IP DA RESERVA>;<MAC SEM TRAÇOS>


    Fábio de Paula Junior

    Testa esta batch, testei e funciona é só vc seguir o que pedi, se não funcionar post o seu arquivo reservas.txt.

    Fábio de Paula Junior

    • Marcado como Resposta Césinha sexta-feira, 30 de novembro de 2012 17:50
    sexta-feira, 30 de novembro de 2012 15:31
    Moderador
  • Opa blz funcionou Fábio.... Vlw
    sexta-feira, 30 de novembro de 2012 17:49