[Script] VBS para instalação de software MSI em computadores remotos
Enviado: 11 Jul 2013 11:51
Esse script é o resultado de várias combinações de outros códigos (como quase todos os outros) que permite ao administrador instalar de forma remota um aplicativo ou pacote MSI para uma lista de máquinas.
Pontos positivos:
* Instalar por exemplo, o Windows Desktop Search(Ferramenta de busca da Microsoft) em 20 computadores é moleza (o Helpdesk pode executar rapidamente), mas se o número de máuqinas fosse algo em torno de 3.000 máquinas(o Helpdesk não executa rapidamente).
* Esse script não necessita de nenhum software cliente instalado nas máquinas destino.
* necessita somente do bloco de notas para ajustes no código.
Pontos negativos
* Nenhum! (brincadeira)
* Necessita privilégio administrativo na máquina destino.
* Firewall ativado sem a devida configuração pode impedir a instalação.
* Pode necessitar de alguns ajustes dependendo do ambiente.
* problemas de acesso via WMI na máquina destino.
Bom, esse script sempre foi útil pra mim e "funcionou na grande maioria das máquinas" e espero que também possa ser útil para alguém de alguma forma.
Segue Script
Pontos positivos:
* Instalar por exemplo, o Windows Desktop Search(Ferramenta de busca da Microsoft) em 20 computadores é moleza (o Helpdesk pode executar rapidamente), mas se o número de máuqinas fosse algo em torno de 3.000 máquinas(o Helpdesk não executa rapidamente).
* Esse script não necessita de nenhum software cliente instalado nas máquinas destino.
* necessita somente do bloco de notas para ajustes no código.
Pontos negativos
* Nenhum! (brincadeira)
* Necessita privilégio administrativo na máquina destino.
* Firewall ativado sem a devida configuração pode impedir a instalação.
* Pode necessitar de alguns ajustes dependendo do ambiente.
* problemas de acesso via WMI na máquina destino.
Bom, esse script sempre foi útil pra mim e "funcionou na grande maioria das máquinas" e espero que também possa ser útil para alguém de alguma forma.
Segue Script
Código: Selecionar todos
'--------------------------------------------------------------------------------
'Título = Instala Software ( MSI ) em computadores remotos
'Autor = Marcelo Montezuma
'Contato = Marcelo Montezuma - [email protected]
'--------------------------------------------------------------------------------
'Notas:
'1 - O usuario deve possuir privilégios administrativos na estação remota
'2 - Para definir a lista das estações remotas, deve-se criar um arquivo com o nome e extensão "computadores.txt"
'na mesma pasta onde encontra-se o script e inserir um nome de maquina por linha sem deixar espaçõs em branco dentro desse arquivo.
'3 - O Resultado sera grava em um arquivo "Resultado.txt"
'--------------------------------------------------------------------------------
'Variaveis e Costantes
Const forReading = 1
Const forWriting = 2
Const forAppending = 8
Dim srcFile , logFile , strRetryFile
Dim Locator, strComputer, Command, service, instance , strParentServer
Dim strInstalaSW, strUserNameL, strPasswordL, strUserName , strPassword, srtAutentica
Dim strSWPackage , strSWPath
Dim Msg000 , Msg001 , Msg002 , Msg003
'Entrada de dados
strAutentica = InputBox ("Escolha uma das opções abaixo:" & vbCrLf &_
"----------------------------------------------------------------------------------------------------------------" & vbCrLf &_
" 1 - Utilizar credencial de rede com privilegio de administrador na estação remota (padrão):" & vbCrLf & vbCrLf &_
" 2 - Utilizar o usuario local com privilegio de administrador e um usuario de rede para acessar os recursos de redes durante o processo de instalação." & vbCrLf & vbCrLf &_
" 0 - Para sair do script " & vbCrLf & vbCrLf & vbCrLf & vbCrLf, "Define usuário para instalação do pacote MSI","1")
Select Case strAutentica
Case 2
Msg000 = MsgBox ("Você deve inserir primeiro o usuario local (administrador) no formato dominio\usuario EX. maquina01\Administrador e quando solicitada a credencial de rede, você deve inserir um usuário válido no formato dominio\usuario EX. Dominio01\bill" , 64 , "Atenção")
'WScript.Echo ("Você deve inserir primeiro o usuario local com privilegio de administrador no formato dominio\usuario EX. maquina01\administrador e quando solicitada a credencial de rede, você deve inserir um usuário válido na rede no formato dominio\usuario EX. dominio01\usuario01")
strUserNameL = inputbox( "Por favor digite o seu usuario *Local* no formato: Dominio\Usuario", "Inserir usuario" )
strPasswordL = inputbox( "Por favor digite sua senha *Local*", "Inserir senha" )
strUserName = inputbox( "Por favor digite o seu usuario *Rede* no formato: Dominio\Usuario", "Inserir usuario" )
strPassword = inputbox( "Por favor digite sua senha *Rede*", "Inserir senha" )
Case 1
Msg001 = MsgBox ("Você deve inserir um usuario de rede com privilégio de administrador no formato Domínio\usuário EX. Dominio\bill" , 64 , "Atenção")
strUserName = inputbox( "Por favor digite o seu usuario no formato: Dominio\Usuario", "Inserir usuario" )
strPassword = inputbox( "Por favor digite sua senha ", "Inserir senha" )
strUserNameL = strUserName
strPasswordL = strPassword
Case 0
Msg002 = MsgBox ("Esse Aplicativo sera fechado" , 64 , "Atenção")
WScript.Quit
Case Else
Msg003 = MsgBox ("Opção inválida, clique OK para fechar o aplicativo" , 64 , "Atenção")
WScript.Quit
End Select
strSWPath = InputBox ("Informe o caminho do pacote de instalação no formato: \\servidor" , "Definir o caminho do servidor","\\Nome_do_servidor\MSI$")
strSWPackage = InputBox ("Escolha uma das opções abaixo:" & vbCrLf &_
"----------------------------------------------------------------------------------------------------------------" & vbCrLf &_
" Pacote1.MSI: " & vbCrLf & vbCrLf &_
" Pacote otimizado (Padrão)" & vbCrLf & vbCrLf & vbCrLf & vbCrLf &_
" Pacote2.MSI: "& vbCrLf & vbCrLf &_
" Pacote padrao " & vbCrLf & vbCrLf & vbCrLf & vbCrLf &_
" pacote3.MSI..." & vbCrLf & vbCrLf &_
" Pacote completo" & vbCrLf & vbCrLf & vbCrLf & vbCrLf, "Define usuário para instalação do pacote MSI","Nome do pacote.MSI")
'Define a lista de computadores e o arquivo de log
srcFile = "computadores.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(srcFile, 1)
strRetryFile = "Computadores_nao_atingidos.txt"
Set oFsOutput = CreateObject("scripting.filesystemobject")
Set oTextRetryput = oFsOutput.OpenTextFile(strRetryFile,forAppending,True)
logFile = "Resultado.txt"
Set oFsOutput = CreateObject("scripting.filesystemobject")
Set oTextOutput = oFsOutput.OpenTextFile(logFile,forAppending,True)
oTextOutput.WriteLine ("Hostname;Status Conexao;Obs Conexao;Status Comando;Obs Comando;Status Instalacao;Obs instalaca;Hora")
'Abre o arquivo de texto e define o hostname
Do Until objTextFile.AtEndOfStream
Dim ObjComputer
intSize = 0
ObjComputer = objTextFile.ReadLine
strComputer = ObjComputer
'Classe WMI utilizada durante a conexão
NameSpace = "root\cimv2"
'Linha de comando executada no computador remoto
Command = "cmd.exe /c net use " & strSWPath & " /user:" & strUserName & " " & strPassword
'Conecta o WBEM (WMI) na estação remota
Err.Number = 0
On Error Resume Next
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer (strComputer , NameSpace , strUserNameL , strPasswordL)
If Err.Number = 0 Then
oTextOutput.Write (strComputer & ";" & "Conexão OK" & ";" & "-" & ";")
Else
Err.Number = 0
strUsuarioTempLocal = "Inserir usuario local"
strPasswordTempLocal = "senha local"
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer (strComputer , NameSpace , strComputer & "\" & strUsuarioTempLocal , strPasswordTempLocal)
If Err.Number = 0 Then
oTextOutput.Write (strComputer & ";" & "Conexão alternativa OK" & ";" & "-" & ";")
Else
oTextOutput.write (strComputer & ";" & "Falha de Conexão" & ";" & Err.Description & ";")
End If
End If
'Executa o comando no desktop remoto
Set Instance = Service.Get("Win32_Process")
intStatus = Instance.Create(Command, null, null, intProcessId)
If Err.Number = 0 Then
oTextOutput.Write ("Comando OK" & ";" & "-" & ";")
Else
oTextOutput.Write ("Falha no comando" & ";" & Err.Description & ";")
End If
'Executa a instalação do computador remoto
Set objSoftware = service.Get("Win32_Product")
strInstalaSW = objSoftware.Install (strSWPath & "\" & strSWPackage ,,True)
'Verifica o status final do processo de instalação
If Err.Number = 0 Then
oTextOutput.Write ("Envio do pacote OK" & ";" & "-" & ";" & Now )
oTextOutput.WriteLine
Else
oTextOutput.Write ("Falha ao enviar o pacote" & ";" & Err.Description & ";" & Now)
oTextOutput.WriteLine
oTextRetryput.WriteLine (strComputer)
End If
Err.Number = 0
strComputer = ""
intSize = intSize + 1
Loop
WScript.Echo("Fim")
WScript.Quit
'Fim