Usuário com melhor resposta
.VBS para atualizar todos os arquivos do ERP interno

Pergunta
-
Saudações, Mestres!
Preciso de uma ajuda de vocês, apesar de ter conhecimento com script .bat não tenho conhecimento algum e não entendo a linguagem VBS.
Hoje tenho um script .BAT que preciso que seja .VBS, esse script roda quando o usuário faz o logon na estação de trabalho, ele finaliza o explorer para que o usuário não use o sistema e na sequência atualiza o executável e todos os seus arquivos .ddl entre outros de diversas extensões, preciso de um script .vbs que faça essa função, ou seja, que finalize o windows explorer durante a atualização e que possa sobrescrever todos os arquivos do sistema sem perguntar se é para substituir, se possível checar antes se os arquivos de origem já estão atualizados no destino e se já estiver informar em tela que o sistema já está atualizado.
Hoje uso o .BAT abaixo, porém não retorna nenhuma mensagem e se o usuário reiniciar o PC ou fazer logon ela roda novamente a atualização.
@echo
taskkill /IM explorer.exe -f
cd c:\
copy \\MEUSERVIDOR\INSTALADORES\Atualizacoes\2017\04\Exec_10_04_17 "C:\ERP\12.2" /y
start explorer.exe
exitSe alguém conseguir me ajudar com essa tarefa agradeço imensamente,
Fernando
Respostas
-
Fernando,
Segue exemplo feito em VBS
Set Shell = WScript.CreateObject("WScript.Shell") Set objNetwork = CreateObject("Wscript.Network") Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'iexplore.exe'") For each Processo in ColProcesses Processo.Terminate() Next strCaminho = "origem" strDestino = "destino" Dim fso Set fso = WScript.CreateObject("Scripting.Filesystemobject") If (fso.FolderExists(strCaminho) = True) Then Set Folder = fso.GetFolder(strCaminho) fso.CopyFolder strCaminho, strDestino & "\", true End if Shell.Run("iexplore.exe") Set Shell = Nothing Set fso = Nothing wscript.quit
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
-
Fernando,
Se você precisar executar comandos do prompt dento do VBS, vc pode usar o seguinte comando
Dim oShell Set oShell = CreateObject("WScript.Shell") oShell.Run "taskkill /IM explorer.exe -f"
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
-
Carlos, Boa Tarde.
Funcionou, porém quando tento executar novamente ele dá um erro de permissão negado, coloquei o Script da seguinte forma, tirei a opção de finalizar o explorer, pois não estava inciando.
Set Shell = WScript.CreateObject("WScript.Shell")
Set objNetwork = CreateObject("Wscript.Network")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2"
strDestino = "C:\Apolo\"
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
If (fso.FolderExists(strCaminho) = True) Then
Set Folder = fso.GetFolder(strCaminho)
fso.CopyFolder strCaminho, strDestino & "\", True
End if
Set Shell = Nothing
Set fso = Nothingwscript.quit
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
-
Faz um teste removendo o true
fso.CopyFolder strCaminho, strDestino & "\"
- Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 11:06
Todas as Respostas
-
Fernando,
Segue exemplo feito em VBS
Set Shell = WScript.CreateObject("WScript.Shell") Set objNetwork = CreateObject("Wscript.Network") Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'iexplore.exe'") For each Processo in ColProcesses Processo.Terminate() Next strCaminho = "origem" strDestino = "destino" Dim fso Set fso = WScript.CreateObject("Scripting.Filesystemobject") If (fso.FolderExists(strCaminho) = True) Then Set Folder = fso.GetFolder(strCaminho) fso.CopyFolder strCaminho, strDestino & "\", true End if Shell.Run("iexplore.exe") Set Shell = Nothing Set fso = Nothing wscript.quit
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
-
Fernando,
Se você precisar executar comandos do prompt dento do VBS, vc pode usar o seguinte comando
Dim oShell Set oShell = CreateObject("WScript.Shell") oShell.Run "taskkill /IM explorer.exe -f"
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 16:29
-
Carlos, Boa Tarde.
Funcionou, porém quando tento executar novamente ele dá um erro de permissão negado, coloquei o Script da seguinte forma, tirei a opção de finalizar o explorer, pois não estava inciando.
Set Shell = WScript.CreateObject("WScript.Shell")
Set objNetwork = CreateObject("Wscript.Network")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2"
strDestino = "C:\Apolo\"
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
If (fso.FolderExists(strCaminho) = True) Then
Set Folder = fso.GetFolder(strCaminho)
fso.CopyFolder strCaminho, strDestino & "\", True
End if
Set Shell = Nothing
Set fso = Nothingwscript.quit
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
-
O comando funcionou, mas após o termino da substituição dos arquivos o explorer.exe tem que iniciar e não está iniciando.
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
- Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
-
Colocar o comando oShell.Run "start explorer.exe" depois end if.
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:34
- Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
-
Desculpa, me explica novamente a necessidade vou tentar modificar
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:51
- Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
-
Me desculpe, devo ter me expressado errado, os arquivos e pastas que então no destino devem ser substituídos pelos arquivos e pastas que estão na origem, pois eles já existem, como trata-se de uma atualização preciso sobrescrever os arquivos já existentes.
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 19:51
- Não Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 10:58
-
Fernando,
Conseguiu modificar o script para atender sua necessidade? Caso precise de ajuda não deixei de postar sua duvida.
Abr,
- Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 20:00
- Não Marcado como Resposta Fernando.Caetano quinta-feira, 13 de abril de 2017 20:00
-
Carlos,
Ainda não consegui, estava dando uma pesquisada agora, como trata-se de uma atualização preciso sobrescrever os arquivos já existentes, quando a pasta não existe ele copia perfeitamente, mas quando existe dá um erro de acesso negado e não sobrescreve os arquivos.
-
-
-
Faz um teste removendo o true
fso.CopyFolder strCaminho, strDestino & "\"
- Marcado como Resposta Fernando.Caetano terça-feira, 18 de abril de 2017 11:06
-
Este erro provavelmente é de permissão
se possível olha este link, mostra como usar o copyFolder
https://msdn.microsoft.com/PT-BR/library/office/gg264819.aspx
Na pasta C:\Apolo\ verifica se possui acesso para modificar
-
Carlos, Bom dia.
O Script funcionou perfeitamente, porém o erro que estava dando era realmente de permissão, ocorre que a instalação do sistema é no "C:\" e todas as vezes que crio a pasta por padrão ela fica somente como leitura, mesmo desabilitando nas propriedades dela para que não seja somente leitura, após reiniciar a estação, a configuração retorna ao estado de somente leitura, por esse motivo que está dando erro ao tentar sobrescrever os arquivos, vou testar colocando a pasta no endereço "C:\Program Files (x86)\Apolo". Vou testar e te retorno.
Obrigado!
- Editado Fernando.Caetano terça-feira, 18 de abril de 2017 11:06
-
-
Sabe informa se são muitos os arquivos que devem permanecer, no caso quando já existe a pasta C:\Apolo\.
Exemplo deve ter um arquivo onde ficas o histórico, talvez podemos fazer uma exceção excluindo ou renomeando os outros e mantendo apenas o arquivo de histórico.
-
Fernando,
Faz o teste com script abaixo, estou usando o comando xcopy para resolver o problema para copiar os arquivos já existentes.
Set Shell = WScript.CreateObject("WScript.Shell") strCaminho = "\\Srv-sql\atualizacoes\12.2\2017\04\Exec_10_04_17\12.2" strDestino = "C:\Apolo\" Dim fso Dim ObjFile Dim objFSO Set fso = WScript.CreateObject("Scripting.Filesystemobject") If (fso.FolderExists(strDestino) = false) Then fso.CreateFolder(strDestino) Shell.Run "xcopy " & strCaminho & " " & strDestino & " /S /Y " Else Shell.Run "xcopy " & strCaminho & " " & strDestino & " /S /Y " End if Set Shell = Nothing Set fso = Nothing wscript.quit
-
-