Usuário com melhor resposta
Mudar uma Bat para VBS.

Pergunta
-
Pessoal,
Estou querendo mudar uma forma de instalar um software que faço distribição via SMS,
Hoje eu tenho alguns em forma de BAT, que mando executar nas estações dos usuários que fica assim.
md %temp%\nomearquivo
xcopy "\\servidor\pasta\nomearquivo"\*.* %temp%\nomearquivo /s /q /ystart /wait %temp%\nomearquivo\Setup.exe /silent
IF EXIST "%ALLUSERSPROFILE%\Menu Iniciar" (
xcopy "\\servidor\pasta\nomearquivo"\regimport.bat "%ALLUSERSPROFILE%\Menu Iniciar\Programas\Inicializar" /q /y
)
IF EXIST "%ALLUSERSPROFILE%\Start Menu" (
xcopy "\\servidor\pasta\nomearquivo"\regimport.bat "%ALLUSERSPROFILE%\Start Menu\Programs\Startup" /q /y
)cacls "%programfiles%\nomearquivo" /T /E /P Everyone:C
cacls "%programfiles%\nomearquivo" /T /E /P Todos:C
IF NOT EXIST "%ALLUSERSPROFILE%\Desktop\My nomearquivo.lnk" start /wait %temp%\nomearquivo\Setup.exe /silent
cacls "%programfiles%\nomearquivo" /T /E /P Everyone:C
cacls "%programfiles%\nomearquivo" /T /E /P Todos:C
del %temp%\nomearquivo\*.* /s /qRD %temp%\nomearquivo
Como fazer para um VBS fazer a mesma coisa que esta BAT?
Obrigado.
Respostas
-
Olá,
você precisa verificar mais profundamente qual é o problema com a instalação que o SMS faz. Até onde eu sei, o SMS disponibiliza duas formas para instalar software: usando a conta LocalSystem e usando a conta do usuário, com privilégios elevados temporariamente. É possível que o software não possa ser instalado com essas credenciais e precise realmente da conta de administrador local para isso.
Tente fazer alguns testes simulando a forma como o SMS instala o sofware, por exemplo, usando a conta SYSTEM para instalar o software. Os logs que devem ser analisados são os da aplicação, e não do SMS em si. Já encontrei problemas semelhantes com a instalação do FSRM no Windows Server 2003 R2.
Espero ter ajudado,
Vinicius Canto
MVP Admin Frameworks
http://viniciuscanto.blogspot.com- Marcado como Resposta Fábio JrModerator sexta-feira, 17 de fevereiro de 2012 10:53
Todas as Respostas
-
Prudentesan, segue a conversão
Set objShell = WScript.CreateObject("WScript.Shell")
Set colUserEnvVars = objShell.Environment("User")x = 0
Set FSO = createobject("scripting.filesystemobject")set objfolder = FSO.CreateFolder(objShell.ExpandEnvironmentStrings("%TEMP%")&"\nomearquivo")
objshell.run "xcopy ""\\servidor\pasta\nomearquivo\*.*"" " & objShell.ExpandEnvironmentStrings("%TEMP%") & "\nomearquivo /s /q /y"
objshell.run "start /wait "& objShell.ExpandEnvironmentStrings("%TEMP%") &"\nomearquivo\Setup.exe /silent"
if FSO.FolderExists(objShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")&"\menu iniciar") then
FSO.copyfile "\\servidor\pasta\nomearquivo\regimport.bat", objShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") &"\Menu Iniciar\Programas\Inicializar"objshell.run "cacls " & objShell.ExpandEnvironmentStrings("%ProgramFiles%")&"""\nomearquivo"" /T /E /P Todos:C, 1, true
x = 1
end ifif x = 0 then
if FSO.FolderExists(objShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")&"\Start Menu") then
FSO.copyfile "\\servidor\pasta\nomearquivo\regimport.bat", & objShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")& "\Start Menu\Programs\Startup",1, trueobjshell.run "cacls " & objShell.ExpandEnvironmentStrings("%ProgramFiles%")&"""\nomearquivo"" /T /E /P Everyone:C", 1, true
end if
end if
If FSO.FolderExists(objShell.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")&""\Desktop\My nomearquivo.lnk""") = false then
objshell.run "start /wait %temp%\nomearquivo\Setup.exe /silent, 1, true
objshell.run "cacls " & objShell.ExpandEnvironmentStrings("%ProgramFiles%")&"""\nomearquivo"" /T /E /P Everyone:C", 1, true
objshell.run "cacls " & objShell.ExpandEnvironmentStrings("%ProgramFiles%")&"""\nomearquivo"" /T /E /P Todos:C", 1, true
end if
objshell.run "del " & objShell.ExpandEnvironmentStrings("%TEMP%") &"""\nomearquivo\\*.*"" /s /q",1, true
FSO.DeleteFolder(objShell.ExpandEnvironmentStrings("%TEMP%") & "\nomearquivo\")
-
-
Vinicius,
Na verdade quando eu mando distribuir via SMS algumas BATs não sei por qual motivo em algumas estações não instalam, rodam mas não funcionam.
Quero mandar executar a mesma coisa via vbscript e se realmente o resultado for melhor que BAT vou estudar mais e começar usar eles.
Valeu.
-
Olá,
recomendo modificar o BAT então para colocar em um arquivo de log a saída de cada um dos comandos. Transformar para VBS, nesse caso, só vai complicar a coisa, já que o trabalho em BAT nesse caso é o mais apropriado.
Você pode colocar a saída de um comando em um arquivo com a seguinte linha:
echo %ERRORLEVEL% >> log.txt
Basta colocar isso em cada um dos comandos. Dessa forma vai ser mais fácil identificar qual das linhas não está funcionando nas estações.
Outro ponto importante: vejo que você modifica o registro com o script. Lembre-se que usuários comuns não possuem permissão para alterar chaves abaixo de HKEY_LOCAL_MACHINE. Se o seu script faz isso, ele vai falhar.
[]s,
Vinicius Canto
MVP Admin Frameworks
blog sobre scripting: http://viniciuscanto.blogspot.com -
Vinicius,
Cheguei a fazer isto,
Mas não ocorre erro na BAT ela executa toda por completa, não aparece nenhum erro no log.
O problema é que em algumas estações instala e em outras o programa é startado e não conlui a instalação,
Na BAT coloquei para ele verificar se existir o atalho no desktop concluir, se não exisitir não teve sucesso na instalação neste caso mandei executar novamente a instalação antes de concluir,
Se eu executar a BAT direto, manual nas estações sempre funciona em todas, mas eu removo o programa das estações e mando instalar via SMS pelo menos 50% não conclui a instalação.
Por isto a idéia de testar com as duas maneiras e depois comparar o resultado.
A chave que ele importa do servidor é gravado no HKEY_CURRENT_USER, isto funciona em todas estações.
Valeu.
-
Olá,
acredito ainda, nesse caso, que simplesmente trocar a tecnologia (bat -> VBS) não vai resolver muita coisa, já que o erro está na execução do programa externo. Qual é o valor do ERRORLEVEL depois da execução do comando em questão? Se diferente de zero, o que esse valor significa?
E mais: CURRENT_USER é uma chave pertencente ao usuário. Qual conta de usuário é usada quando vc aplica um pacote via SMS?
[]s,
Vinicius Canto
MVP Admin Frameworks
blog sobre scripting: http://viniciuscanto.blogspot.com -
Vinicius,
Na verdade ele não da erro quando roda o pacote,
Ele começa a instalar cria a pasta de instalação do programa e não conclui,
Fiz via VBS para testar e ocorreu a mesma coisa em algumas distribuições,
Estou verificando se é algum processo que esta tivo e trava a instalação,
Sabe se tem alguma maneira de incluir no VBS ou na BAT para antes de rodar parar algum proceso que esteja Rodando?
A conta de usuário que instala via SMS é uma conta Domain Admins.
Mas ele copia uma Bat para o inicializar e quando o user loga ela importa a chave de um servidor.
Valeu.
-
Ok, o problema então nada tem a ver com o script que instala a aplicação. Você deve investigar o que ocorre com a instalação da aplicação antes de qualquer outra coisa. Porque ela é abortada em alguns clientes? Tem algum log da instalação que você possa observar? Quem fez o programa de instalação: o fabricante ou você usando ferramentas específicas?
Quanto ao registro do usuário, você está ciente que o Inicializar deve ser do All Users para funcionar em todos usuários? O que exatamente é gravado no registro? Normalmente aplicações bem escritas não precisam disso para funcionar.
[]s,
Vinicius Canto
MVP Admin Frameworks
blog sobre scripting: http://viniciuscanto.blogspot.com -
Ola Vinicius,
Estou de volta no batente,
Desculpa a demora para responder.
Olha só, o que esta ocorrendo é que somente alguns determinados programas da estes erros de não concluir,
Mas o que estava preucupado é que se eu rodar a bat na mão direto em todos os testes o programa instala perfeitamente, mas se eu rodar em modo silient via SMS o programa é startado mas nem todas conclui.
Nos logs não aparecem erros ou informação alguma,
O programa é instado conforme foi desenvolvido pelo fabricante, sem nenhuma alteração.
A informação que eu preciso adicionar no registro é um nome de servidor para a aplicação.
Mas insto independente de concluir a instalação ou não esta sendo adicionado no registro.
Estou voltando a ativa e analisando os pacotes novamente inclusive rodar bat bia SMS.
Valeu.
-
Olá,
você precisa verificar mais profundamente qual é o problema com a instalação que o SMS faz. Até onde eu sei, o SMS disponibiliza duas formas para instalar software: usando a conta LocalSystem e usando a conta do usuário, com privilégios elevados temporariamente. É possível que o software não possa ser instalado com essas credenciais e precise realmente da conta de administrador local para isso.
Tente fazer alguns testes simulando a forma como o SMS instala o sofware, por exemplo, usando a conta SYSTEM para instalar o software. Os logs que devem ser analisados são os da aplicação, e não do SMS em si. Já encontrei problemas semelhantes com a instalação do FSRM no Windows Server 2003 R2.
Espero ter ajudado,
Vinicius Canto
MVP Admin Frameworks
http://viniciuscanto.blogspot.com- Marcado como Resposta Fábio JrModerator sexta-feira, 17 de fevereiro de 2012 10:53