[Script] VBS para instalação de software MSI em computadores remotos

Scripts diversos para automatizar tarefas em servidores ou auxilio com tarefas administrativas.
Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1523
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 42
Contato:
Status: Offline

[Script] VBS para instalação de software MSI em computadores remotos

Mensagem por marceloleaes »

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

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


"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

Voltar para “Scripts”