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