none
Script .bat Com IF Else RRS feed

Respostas

  • Paulo,

    Algumas recomendações:

    1-Já que vc vai fazer um IF para cada computador a leitura do arquivo TXT com o nome das estações se torna desnecessária.

    2- Aninhar um IF dentro do outro ficaria confuso e de dificil manutenção então faça blocos

    3- existiria codigo comum a todos os blocos então faça uso de LABEL\GOTOs, ficaria funcionando como uma funsção\sub de outras linguagens. veja no exemplo que enviei que passo o nome da maquina e do servidor wsus como parametros.

     

    dá uma olhada neste código que misturei as duas partes do seu codigo

     

    @ECHO OFF
    
    
    CALL :TESTA_CONFIGURA MICRO01 WSUS01
    
    CALL :TESTA_CONFIGURA MICRO02 WSUS02
    
    rem repita a linha acima para cada uma das suas 70 maquinas
    
    
    PAUSE
    
    
    GOTO :EOF
    
    
    REM ---------------
    REM CONFIGURAÇÕES DIFERENCIADAS (PASSE DOIS PARAMETROS, MAQUINA E SERVIDOR WSUS
    REM ----------------
    :CONFIG_WSUS
    
    
    	reg add \\%1\HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /V Start /t reg_dword /d 2 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V AcceptTrustedPublisherCerts /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V ElevateNonAdmins /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V TargetGroup /t reg_sz /d _HOMOLOGA /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V TargetGroupEnabled /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AUOptions /t reg_dword /d 4 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AUPowerManagement /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AutoInstallMinorUpdates /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V DetectionFrequency /t reg_dword /d 5 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V DetectionFrequencyEnabled /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V IncludeRecommendedUpdates /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAUAsDefaultShutdownOption /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAUShutdownOption /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAutoRebootWithLoggedOnUsers /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAutoUpdate /t reg_dword /d 0 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V ScheduledInstallDay /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V ScheduledInstallTime /t reg_dword /d 6 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V UseWUServer /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V RebootWarningTimeoutEnabled /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V RebootWarningTimeout /t reg_dword /d 1 /f
     
    	REM AS PROXIMAS CONFIGURAM O SERVIDOR WSUS
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUServer /t reg_sz /d http://%2 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUStatusServer /t reg_sz /d http://%2 /f
    
     	C:\_HOMOLOGA\chamawuauser.vbs %1
    
    
    
    GOTO :EOF
    
    
    :TESTA_CONFIGURA
    SET COMPUTADOR=%1
    SET SERVERWSUS=%2
    
    PING -n 1 -4 %COMPUTADOR% | findstr "TTL" > NUL
    IF %ERRORLEVEL% EQU 0 (
    	ECHO %COMPUTADOR% PINGOU
    	ECHO %COMPUTADOR% >> PINGA.TXT
    	CALL :CONFIG_WSUS %COMPUTADOR% %SERVERWSUS%
    ) ELSE ( ECHO %COMPUTADOR% NAO PINGA & ECHO %COMPUTADOR% >> NAOPINGA.TXT )
    
    
    GOTO :EOF

     


    Fábio de Paula Junior

    sábado, 18 de junho de 2011 00:16
    Moderador

Todas as Respostas

  • Não existe ELSE IF() e sim ELSE ( IF ), um IF encadeado dentro do ELSE. Veja um exemplo do uso correto

    @ECHO OFF
    
    ECHO %COMPUTERNAME%
    IF %COMPUTERNAME% EQU MICRO01 (
    	ECHO faz isso
    ) ELSE ( IF %COMPUTERNAME% EQU MICRO02 (
    
    		ECHO faz aquilo
    
    	) ELSE ( IF %COMPUTERNAME% EQU MICRO03 (
    
    			ECHO ultima chance
    		)
    	)
    )
    

    Tem um exemplo com idades nesta página http://pt.wikipedia.org/wiki/Batch

     

     


    Fábio de Paula Junior
    quinta-feira, 16 de junho de 2011 22:28
    Moderador
  • Fábio agradeço sua ajuda porém ainda não consegui resolver o problema.

    Tentei fazer da maneira que segue abaixo, porém ainda não consegui. A minha intenção é pingar a máquina, se responder na rede, insere os arquivos de reg, se não responder na rede segue para a próxima máquina.

    Só que ele para na primeira que eu deixei desligada de propósito e demora um tempão até sair deste teste e ainda assim não segue a sequencia das máquinas.

    Aqui eu coloquei duas máquinas, porém eu vou colocar 70 máquinas depois.

    ping.exe -n 1 rbst4766 | findstr "TTL" > NULL
     IF errorlevel 1 (
           reg add \\rbst4766\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUServer /t reg_sz /d http://tzxxx001 /f
           reg add \\rbst4766\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUStatusServer /t reg_sz /d http://tzxxx001 /f
           C:\HOMOLOGA\chamawuauser.vbs rbst4766

           ) else (

    ping.exe -n 1 rbsj0555 | findstr "TTL" > NULL
      IF errorlevel 1 (
           reg add \\rbst4173\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUServer /t reg_sz /d http://tzyyy001 /f
           reg add \\rbst4173\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUStatusServer /t reg_sz /d http://tzyyy001 /f
           C:\HOMOLOGA\chamawuauser.vbs rbst4173

             )
           )
    pause

    sexta-feira, 17 de junho de 2011 19:39
  • Paulo,

    Algumas recomendações:

    1-Já que vc vai fazer um IF para cada computador a leitura do arquivo TXT com o nome das estações se torna desnecessária.

    2- Aninhar um IF dentro do outro ficaria confuso e de dificil manutenção então faça blocos

    3- existiria codigo comum a todos os blocos então faça uso de LABEL\GOTOs, ficaria funcionando como uma funsção\sub de outras linguagens. veja no exemplo que enviei que passo o nome da maquina e do servidor wsus como parametros.

     

    dá uma olhada neste código que misturei as duas partes do seu codigo

     

    @ECHO OFF
    
    
    CALL :TESTA_CONFIGURA MICRO01 WSUS01
    
    CALL :TESTA_CONFIGURA MICRO02 WSUS02
    
    rem repita a linha acima para cada uma das suas 70 maquinas
    
    
    PAUSE
    
    
    GOTO :EOF
    
    
    REM ---------------
    REM CONFIGURAÇÕES DIFERENCIADAS (PASSE DOIS PARAMETROS, MAQUINA E SERVIDOR WSUS
    REM ----------------
    :CONFIG_WSUS
    
    
    	reg add \\%1\HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /V Start /t reg_dword /d 2 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V AcceptTrustedPublisherCerts /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V ElevateNonAdmins /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V TargetGroup /t reg_sz /d _HOMOLOGA /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V TargetGroupEnabled /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AUOptions /t reg_dword /d 4 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AUPowerManagement /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V AutoInstallMinorUpdates /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V DetectionFrequency /t reg_dword /d 5 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V DetectionFrequencyEnabled /t reg_dword /d 1 /f
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V IncludeRecommendedUpdates /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAUAsDefaultShutdownOption /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAUShutdownOption /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAutoRebootWithLoggedOnUsers /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V NoAutoUpdate /t reg_dword /d 0 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V ScheduledInstallDay /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V ScheduledInstallTime /t reg_dword /d 6 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V UseWUServer /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V RebootWarningTimeoutEnabled /t reg_dword /d 1 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /V RebootWarningTimeout /t reg_dword /d 1 /f
     
    	REM AS PROXIMAS CONFIGURAM O SERVIDOR WSUS
    	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUServer /t reg_sz /d http://%2 /f
     	reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUStatusServer /t reg_sz /d http://%2 /f
    
     	C:\_HOMOLOGA\chamawuauser.vbs %1
    
    
    
    GOTO :EOF
    
    
    :TESTA_CONFIGURA
    SET COMPUTADOR=%1
    SET SERVERWSUS=%2
    
    PING -n 1 -4 %COMPUTADOR% | findstr "TTL" > NUL
    IF %ERRORLEVEL% EQU 0 (
    	ECHO %COMPUTADOR% PINGOU
    	ECHO %COMPUTADOR% >> PINGA.TXT
    	CALL :CONFIG_WSUS %COMPUTADOR% %SERVERWSUS%
    ) ELSE ( ECHO %COMPUTADOR% NAO PINGA & ECHO %COMPUTADOR% >> NAOPINGA.TXT )
    
    
    GOTO :EOF

     


    Fábio de Paula Junior

    sábado, 18 de junho de 2011 00:16
    Moderador
  • Repare também que no comando ping eu adicionei um -4, ele força o uso do IPV4, caso o ping utilize o IPV6 o TTL não aparece na mensagem e atrapalha a utilização do PING.
    Fábio de Paula Junior
    sábado, 18 de junho de 2011 00:19
    Moderador
  • Fábio, agradeço muito a sua ajuda, o teu script funcionou muito bem!

     

    Depois que testei o seu script, verifiquei que o vbs que está no final o chamawuauser.vbs, está com algum problema, achei que esta funcionando.

    Peço que verifique por favor este VBS. E Desde já muito obrigado!

    A intenção deste VBs é efetuar o comando wuauclt.exe /resetauthorization /detectnow.

    ON ERROR RESUME NEXT
    strComputer = Wscript.Arguments(0)
    Set autoUpdateClient = CreateObject("Microsoft.Update.AutoUpdate",strComputer)
    AutoUpdateClient.detectnow()

    Se possível gostaria de inserir também os seguintes comandos neste vbs:

    net stop wuauserv
    net stop bits
    net start wuauserv
    net start bits
    wuauclt.exe /resetauthorization /detectnow (esse já está na vbs porém não está funcioando
    wuauclt /detectnow

    domingo, 19 de junho de 2011 06:21
  • Ao invés de colocar estes comando de restart dos serviços no .VBS vc poderia colocar no próprio .BAT utilizando o comando SC.

    http://ss64.com/nt/sc.html


    Fábio de Paula Junior
    segunda-feira, 20 de junho de 2011 11:21
    Moderador
  • Fábio, tens razão.

     

    Coloquei os comandos em bat porém funcionaram parcialmente.

    Segue a forma que coloquei os comandos:

     

    @echo on
     
    net stop wuauserv /y
    net stop bits /y

    sc config wuauserv start= auto
    sc config bits start= auto
    sc start wuauserv
    sc start bits
     
    echo Initiating Windows Updates detection cycle...

    wuauclt.exe /resetauthorization
    wuauclt.exe /detectnow
    wuauclt.exe /reportnow

    @echo Off

    Dos Comandos acima não estou conseguindo colocar em automatico o serviço BITs e consequentemente não consigo iniciá-lo.
    Estou conseguindo habilitar o serviço "atualizações automáticas" porém não consigo iniciá-lo.

    Se eu executar esta bat localmente ela funciona, o problema está na execução dela pela rede.

    Lembrando que nas conversar acima a forma que eu estou chamado esta bat é como coloquei abaixo.

    C:\_HOMOLOGA\chamawuauser.vbs %1

     

    segunda-feira, 20 de junho de 2011 17:26
  • Paulo,

    Vc está acrescentando o código no proprio script e não chamando outro correto?

    O seu script está sendo executado remotamente então vc deve acrescentar os parametros do servidor remoto, veja acrescentei os comandos de configurar automático e depois iniciar e repare após\antes de quais trechos do código vc deve acrescentá-los.

     

    reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUServer /t reg_sz /d http://%2 /f
    reg add \\%1\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /V WUStatusServer /t reg_sz /d http://%2 /f

    sc \\%1 config bits start= auto

    sc \\%1 start bits

    C:\_HOMOLOGA\chamawuauser.vbs %1


    Fábio de Paula Junior
    terça-feira, 21 de junho de 2011 13:15
    Moderador
  • Mais uma dica.

    Se o script em .VBS não estiver funcionando, tente usar o PSEXEC. http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

    Assim vc pode rodar os comandos que vc conhece bem (wuauclt /....) remotamente.

     

    http://social.technet.microsoft.com/Forums/pt-BR/winsrv2003pt/thread/c1f1ced3-9551-4131-86fc-b440aacee379


    Fábio de Paula Junior
    terça-feira, 21 de junho de 2011 13:26
    Moderador
  • Quero desde já agradecer seu apoio em meu auxilio.

     

    Cara seguinte, passei o dia tentando fazer funcionar com o psexec, porém recebi a informação de aqui na empresa não vai funcionar  o psexec então tenho que tentar fazer por bat o vbs mesmo.

     

    Estava pesquisando aqui e não tem a possibilidade de tentar rodar estes comandos fazendo um runas via bat na máquina?

     

    quarta-feira, 22 de junho de 2011 02:37
  • Paulo,

    poderia usar o runas, porem ele vai pedir intervenção pelo operador. o mais correto seria usar o psexec mesmo.

    psexec.exe -u dominio\usuario -p "senha" -c -d caminhodoarquivo


    Rafael Paraná
    quarta-feira, 22 de junho de 2011 11:26
  • Infelizmente não posso usar o psexec aqui na empresa porque foram desabilitados os compartilhamentos administrativos de todas as estações e o psexec se utilizada destes compartilhamentos para funcionar.

     

    Posso colocar um vbs no script de login das máquinas já que não consigo mandar este comando remotamente, só preciso da sua ajuda para terminar de configurar a vbs abaixo:

    Pelo que verifiquei esta vbs está correta, porém não está funcionando. Será que falta algum parâmetro?

    Outra pergunta, este vbs tem a função de acordar as máquinas para subirem no wsus, será que tem que colocar mais alguma coisa?

    ON ERROR RESUME NEXT
    strComputer = Wscript.Arguments(0)
    Set autoUpdateClient = CreateObject("Microsoft.Update.AutoUpdate",strComputer)
    AutoUpdateClient.detectnow()

    Obrigado!!

    quarta-feira, 22 de junho de 2011 11:43
  • Paulo,

    ele apresenta algum erro? verifique o log "%systemroot%\windowsupdate.log" e veja qual mensagem aparece.


    Rafael Paraná
    quarta-feira, 22 de junho de 2011 12:51