none
Scritp para instalação de hotfix baseado em uma lista RRS feed

  • Pergunta

  •  

    Senhores,

     

    Eu gostaria de saber se há possibilidade de criar um script de instalação de hotfix baseado em um diretório, vou explicar:

    A minha idéia era salvar todas as atualizações da microsoft em um diretório da rede.

     

    desta forma o scritp de alguma maneira daria um comando por exemplo msiexec "\\server\share\*"  ou seja instalaria todos os hotifix contidos no compartilhamento, assim bastava adicionar novos arquivos neste compartilhamento que o script ja entenderia.

     

     

    Obrigado

    terça-feira, 20 de janeiro de 2009 18:04

Respostas

  • Opa... beleza?
    Desculpe a demora...
    Testa o script assim:
    Onde estiver escrito "pasta", o scrip irá pegar da constante que está declarado na linha 
    Const Pasta =\\brcwbsv16.\WsusContent\UPDATE"
    Use-o do jeito que está escrito abaixo.
    Abraço e boa sorte.


    Dim WshShell
    Dim Arquivo

    Const Pasta ="\\brcwbsv16\WsusContent\UPDATE"

    Set WshShell = Wscript.CreateObject("Wscript.Shell")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Pasta)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

    Set colItems = objFolder.Items
    For Each objItem in colItems
        Arquivo = Pasta & "\" & objItem.Name
        WshShell.Run Arquivo, 1, true
    Next


    • Sugerido como Resposta Douglas Tesch terça-feira, 17 de fevereiro de 2009 15:00
    • Marcado como Resposta Fábio JrModerator sexta-feira, 13 de janeiro de 2012 15:33
    sexta-feira, 13 de fevereiro de 2009 11:51

Todas as Respostas

  • E aí amigão? Blz?

     

    Entendi sua idéia, mas se houver falha na instalação de alguma atualização?

    O mais indicado neste caso é utilizar o WSUS. Acho que o tarefa ficaria mais automatizada e com recursos muito interessantes. Se você não tiver uma máquina para isso, pense em virtualização, isso aumentaria o valor agregado da TI que você faz parte.

    Pense na dica...

    Abraço e boa sorte!

     

     

     

    quarta-feira, 21 de janeiro de 2009 19:00
  • Bom dia

     

    Depois de uma noite inteira pensando neste post, pensei que isto poderia ser util para outras aplicações/sistemas.

    Faça o seguinte:

    - Crie um script que liste os arquivos de uma pasta;

    - Utilize uma estrutura de repetição e cada vez que "rodar" um registro, monte o nome do arquivo e execute-o.

    Depois eu vou gerar o script para testar... a idéia fica legal para automatizar outras coisas.

     

    Até mais!

     

     

     

    quinta-feira, 22 de janeiro de 2009 12:08
  • Fala amigão...

     

    Fiz o script... Testa aí e posta pra gente se ficou legal!

    Abraço!

     

     

    Dim WshShell
    Dim Arquivo

    Const Pasta ="pasta da rede"

    Set WshShell = Wscript.CreateObject("Wscript.Shell")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Pasta)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

    Set colItems = objFolder.Items
    For Each objItem in colItems
        Arquivo = Pasta & "\" & objItem.Name
        WshShell.Run Arquivo, 1, true
    Next

     

     

     

    quinta-feira, 22 de janeiro de 2009 19:26
  • Ola Douglas,

     

    Obrigado pelo retorno

    tentei usar uma pasta de rede e deu erro na linha 8

    A minha intenção era instalar todos os arquivos que ficam armazenados neste compartilhamento da rede.

    sera que so funciona ser for uma pasta local, tentei aqui e nao funcionou tambem

     

    Dim WshShell
    Dim Arquivo

    Const Pasta ="\\brcwbsv16\WsusContent\UPDATE"

    Set WshShell = Wscript.CreateObject("Wscript.Shell")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(\\brcwbsv16\WsusContent\UPDATE)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

    Set colItems = objFolder.Items
    For Each objItem in colItems
        Arquivo = \\brcwbsv16\WsusContent\UPDATE & "\" & objItem.Name
        WshShell.Run Arquivo, 1, true
    Next

     

     

    terça-feira, 27 de janeiro de 2009 10:39
  • Opa... beleza?
    Desculpe a demora...
    Testa o script assim:
    Onde estiver escrito "pasta", o scrip irá pegar da constante que está declarado na linha 
    Const Pasta =\\brcwbsv16.\WsusContent\UPDATE"
    Use-o do jeito que está escrito abaixo.
    Abraço e boa sorte.


    Dim WshShell
    Dim Arquivo

    Const Pasta ="\\brcwbsv16\WsusContent\UPDATE"

    Set WshShell = Wscript.CreateObject("Wscript.Shell")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Pasta)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

    Set colItems = objFolder.Items
    For Each objItem in colItems
        Arquivo = Pasta & "\" & objItem.Name
        WshShell.Run Arquivo, 1, true
    Next


    • Sugerido como Resposta Douglas Tesch terça-feira, 17 de fevereiro de 2009 15:00
    • Marcado como Resposta Fábio JrModerator sexta-feira, 13 de janeiro de 2012 15:33
    sexta-feira, 13 de fevereiro de 2009 11:51
  • Douglas,

    Excelente para que eu queria. agora ficaria perfeito pra mim se neste mesmo scritp chamasse os arquivos deste compartilhamento com um comando. Por exemplo

    neste compartilhamento havera varios pacotes msi, e que serão adicionados varios outros pacotes em determinados periodos. O script que foi feito chama perfeitamente um a um, mas me obriga a clicar no next para instala-los.

    haveria possibilidade de chamar estes pacotes msi com o comando

    msiexec "\\server\share\pacotemsi"  /qn

    e quando terminasse a instalacao daria sequencia para os proximos pacotes, este comando instala de forma silenciosa.

    Grato mais uma vez


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    terça-feira, 10 de março de 2009 18:23
  • Adriano,

    ao invés de utilizar Installer sugiro que apenas execute o kb com parametros:

     

    Hotfix = "WindowsXP-KB951072-v2-x86-PTB.exe" 
     
    Set oShell= CreateObject("Wscript.Shell")  
    Set oEnv = oShell.Environment("PROCESS")  
     
    'Desativa o "Aviso de Segurança"  
    oEnv("SEE_MASK_NOZONECHECKS") = 1  
     
    oShell.Run HotFix &  "/quiet /norestart",, True 
       
    'Ativa o "Aviso de Segurança"  
    oEnv("SEE_MASK_NOZONECHECKS") = 0  
     
     

    Agora é só adaptar na sua rotina =)

    Abs
    Pablito

    -----------------
    Oreia seca
    terça-feira, 17 de março de 2009 17:50
  • Adriano,

    Achei um artigo bem interessante sobre o seu assunto:
    http://msmvps.com/blogs/athif/archive/2005/11/20/76035.aspx

    Abs
    Pablito

    -----------------
    Oreia seca

    terça-feira, 17 de março de 2009 18:33
  • Pablito,

    Obrigado pelo comentario, eu só gostaria que o script buscasse automaticamente todos os fix contidos em um compartilhamento, o objetivo é que eu adicione ou remova kbs sem alterar o script. ou seja apenas clicando no script ele buscaria e instalaria todos os fix, um a um sem necessidade de ter que dizer qual fix deve ser instalado, neste caso o scritp deveria instalar todos os fix de um determinado local

    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    quinta-feira, 19 de março de 2009 11:06
  • 'Pasta local para salvar logs  
    PastaLocal ="c:\updatekb\" 
     
    'Para compartilhada  
    PastaServer="\\servidor\up$\" 
     
    Set WshShell = Wscript.CreateObject("Wscript.Shell")  
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.Namespace(PastaServer)  
    Set objFolderobjFolderItem = objFolder.Self  
    Set colItems = objFolder.Items  
     
    For Each objItem in colItems  
        WScript.Echo now & " - [" & objitem.Name & "]"  
        Atualiza objitem.Name,pastalocal,pastaserver  
    Next  
     
    Function Atualiza(fArquivo,Local,LServer)  
        
        'Caso o diretório não exista  
        Set objFSO = CreateObject("Scripting.FileSystemObject")  
        If Not objFSO.FolderExists(local) Then  
            Set objFolder = objFSO.CreateFolder(local)  
        End If  
          
        na=Split(farquivo,".")  
        Arquivo=local & na(0) & ".log"  
          
        'Se o log ja existe é sinal que o patch ja foi aplicado
        If objFSO.FileExists(Arquivo) Then  Exit Function  
          
        Set oShellCreateObject("Wscript.Shell")  
        Set oEnv = oShell.Environment("PROCESS")  

        'Retirar o aviso de segurança
        oEnv("SEE_MASK_NOZONECHECKS") = 1  
     
        Set objWsh = WScript.CreateObject("WScript.Shell")  
     
        If LCase(na(1))="msi" Then  
            arqexec="msiexec /i """ & lServer & fArquivo & """ /qb /la """ & arquivo & """"  
        Else  
            arqexec="""" & lServer & fArquivo & """ /passive /norestart /log:""" & arquivo & """"  
        End if  
        return=objWsh.Run(arqexec,, True)  
        oEnv("SEE_MASK_NOZONECHECKS") = 0  
        WScript.Sleep 500  
    End Function 


    Fiz na correria mas funciona bem
    1. Crie um diretorio compartilhado na rede
    2. Setar no script um diretorio local onde ira guardar os logs
    3. Jogar as atualizações no diretório



    Espero q ajude



    Abs
    Pablito

    -----------------
    Oreia seca
    • Sugerido como Resposta lcosta.reis terça-feira, 23 de junho de 2009 18:34
    sexta-feira, 20 de março de 2009 16:25
  • Ola Pablito,


    Obrigado pela atenção.

    ë justamente disso que eu preciso.

    Mas infelizmente tiveram alguns erros

    Linha=45
    carac = 5
    erro = o sistema nao pode encontrar o arquivo especificado
    codigo=80070002
    origen - null


    outra coisa, haveria possibilidade de instalar sem mostrar o pop-up na tela mostrando o nome do arquivo e a data?

    Abraço e obrigado mais uma vez



    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    quarta-feira, 25 de março de 2009 17:38
  • Ola Pablito, usei esse script funciona muito bem porem apenas para usuarios administradores, como eu faria para esse usar uma conta administrativa???


    o meu script ficou assim:

    'Pasta local para salvar logs  
    PastaLocal ="c:\log_atu\" 
     
    'Para compartilhada  
    PastaServer="\\Ssrv\NETLOGON\System\ATU\win32-ptb\"
    'PastaServer="d:\atu\"
     
    Set WshShell = Wscript.CreateObject("Wscript.Shell")  
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.Namespace(PastaServer)  
    Set objFolderobjFolderItem = objFolder.Self  
    Set colItems = objFolder.Items  
     
    For Each objItem in colItems   
        Atualiza objitem.Name,pastalocal,pastaserver  
    Next  
     
    Function Atualiza(fArquivo,Local,LServer)  
       
        'Caso o diretório não exista  
        Set objFSO = CreateObject("Scripting.FileSystemObject")  
        If Not objFSO.FolderExists(local) Then  
            Set objFolder = objFSO.CreateFolder(local)  
        End If  
          
        na=Split(farquivo,".")  
        Arquivo=local & na(0) & ".log"  
          
        'Se o log ja existe é sinal que o patch ja foi aplicado
        If objFSO.FileExists(Arquivo) Then  Exit Function  
          
        Set oShell= CreateObject("Wscript.Shell")  
        Set oEnv = oShell.Environment("PROCESS") 

        'Retirar o aviso de segurança
        oEnv("SEE_MASK_NOZONECHECKS") = 1  
     
        Set objWsh = WScript.CreateObject("WScript.Shell")  
     
        If LCase(na(1))="msi" Then  
            arqexec="msiexec /i """ & lServer & fArquivo & """ /qb /la """ & arquivo & """"  
        Else  
            arqexec="""" & lServer & fArquivo & """ /passive /norestart /log:""" & arquivo & """"
           'arqexec="""" & lServer & fArquivo & """ /passive /norestart " 
        End if
        return=objWsh.Run (arqexec,, True)
        oEnv("SEE_MASK_NOZONECHECKS") = 0  
        WScript.Sleep 500  
    End Function

    terça-feira, 23 de junho de 2009 18:36