Usuário com melhor resposta
Script não funciona logon Win7

Pergunta
-
script funciona somente em WinXP!
Tenho um script em vbs que altera um arquivo que está no "c:\programfiles\tun"o mesma está configurada para funcionar no startup do computador via GPO.
Porém as Cpu´s Win7 mesmo estando dentro da OU o script não funciona(não apresenta erro..etc..nada). caso eu configure o mesmo script para rodar nao logon do usuário, o mesmo passa a funcionar no win7, porém cria o arquivo correspondente em outro lugar (c:\users\usuarioteste\appdata\local\virtualstore\programfiles\tun\emul"
*tenho a impressão que o mesmo não tem permissão para executar/modificar o prografiles, mas no xp funciona normal.
Desde já agradeço a ajuda.
Respostas
-
Casado,
com base nesse link http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html,
montei o script abaixo, testei no WIn8, não pude testar no XP, pois estou sem uma vm no momento, no testes que fiz ele funcionou,
no entanto, ele apresenta a seguinte tela de confirmação..
Set os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem") For Each obj In os Set prps = obj.Properties_ OSLang = prps("OSLanguage").value BldNum = prps("BuildNumber").value Next if BldNum > 7100 then wscript.echo "Vou rodar no Win7 ou no Win8" win7ou8 if BldNum = 2600 then wscript.echo "Vou rodar no WinXP" winXp end if end if SUB win7ou8 If WScript.Arguments.length =0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Else Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo Set wshShell = CreateObject("WScript.Shell") strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN" 'variavel com destino if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia else if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then objFSO.Copyfile StrOrigem, StrDestino & "\" , true End if End If End If END SUB SUB winXP Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo Set wshShell = CreateObject("WScript.Shell") strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN" 'variavel com destino if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia else if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then objFSO.Copyfile StrOrigem, StrDestino & "\" , true End if End If END SUB
Obs: Vou propor resposta para enviar um alerta..
- Editado Aparecido Deveza quarta-feira, 15 de agosto de 2012 02:55 Info
- Sugerido como Resposta Aparecido Deveza quarta-feira, 15 de agosto de 2012 02:55
- Marcado como Resposta Fábio JrModerator quinta-feira, 16 de agosto de 2012 21:20
Todas as Respostas
-
Boa Noite Casado,
No XP acredito que esteja funcionando devido ele não possuir o UAC (User Account Control) que existe no Win7, mas poste o treco do Cod para que possamos sugerir alguma ação...
em todo caso, verifique se dessa forma apresenta erro...
Set wshShell = CreateObject( "WScript.Shell" ) varPROGRAMFILES = wshShell.ExpandEnvironmentStrings( "%PROGRAMFILES%" ) FilePathControl = varPROGRAMFILES & "\tun" ArqOrig = "Original.txt" ArqAlt = "Alterado.txt"
Set objFolder = CreateObject("Scripting.FileSystemObject") Set fileobject = objFolder.GetFile(FilePathControl &"\"& ArqOrig) fileobject.Name = ArqAlt Wscript.echo "Alterado com sucesso"
- Editado Aparecido Deveza terça-feira, 31 de julho de 2012 23:18 Correção
- Marcado como Resposta Fábio JrModerator quarta-feira, 15 de agosto de 2012 16:15
- Não Marcado como Resposta Fábio JrModerator quarta-feira, 15 de agosto de 2012 16:16
-
Segue o codigo vbs
Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
Set wshShell = CreateObject("WScript.Shell")strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem
StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN" 'variavel com destino
if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe
objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copiaelse
if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
objFSO.Copyfile StrOrigem, StrDestino & "\" , trueEnd if
End Ifo mesmo funciona normal no xp, porem no win7 nao faz nada..nem erro aparece...
-
Boa Noite Casado,
então fiz um teste com o seu script, ele não funcionou devido ao UAC, quando o UAC esta habilitado ele restringe o acesso do usuário as pastas de sistemas entre elas as pasta do "Program file" para seu script funcionar teriar que rodar com elevação ADM.
uma alternativa seria alterar as propriedades de segurança da pasta, dando direito de modificar na pasta, agora não sei o tanto de maquinas que você tem e se seria viável esse tipo de ação.
O Alison Mendes do N Santos neste post http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/c345b0cd-175b-4618-9962-8746407bb5cc/ achou uma solução para o caso parecido com o seu...
- Editado Aparecido Deveza quinta-feira, 2 de agosto de 2012 00:11 .
-
Boa Noite Casado,
então fiz um teste com o seu script, ele não funcionou devido ao UAC, quando o UAC esta habilitado ele restringe o acesso do usuário as pastas de sistemas entre elas as pasta do "Program file" para seu script funcionar teriar que rodar com elevação ADM.
uma alternativa seria alterar as propriedades de segurança da pasta, dando direito de modificar na pasta, agora não sei o tanto de maquinas que você tem e se seria viável esse tipo de ação.
O Alison Mendes do N Santos neste post http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/c345b0cd-175b-4618-9962-8746407bb5cc/ achou uma solução para o caso parecido com o seu...
Eu vi o link, pore´m não endi direito oque ele queria fazer...eu parti do principio que como executei no startup da maquina, o usuário SYSTEM, teria permissão total nesta pasta...
quanto a alterar a permissão, creio que devo cair no mesmo problema, não vou ter permissão suficiente para isso...via script...(vou verificar)
tenho aproximadamente 180 computadores....
caso tenha mais ideias, agradeço!
desde já agradeço pela força!
-
Sugestão: Habilite a diretiva: Always wait for the network at computer startup
Já reparou como o processo de inicialização dos Windows do XP em diante são mais rápidos que o 2000, é porque por padrão ele não aguarda o serviço de rede subir, as vezes é tão rápido que não roda o script. No seu XP já está funcionando, então é apenas um chute.
Descrição do recurso do Windows XP Professional Fast Logon Optimization
support.microsoft.com/kb/305293
Rodando como script de startup a principio não deveria ter problemas de permissão já que roda com permissão da conta System.
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator terça-feira, 14 de agosto de 2012 16:30
- Não Sugerido como Resposta Fábio JrModerator terça-feira, 14 de agosto de 2012 16:30
-
Casado,
com base nesse link http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html,
montei o script abaixo, testei no WIn8, não pude testar no XP, pois estou sem uma vm no momento, no testes que fiz ele funcionou,
no entanto, ele apresenta a seguinte tela de confirmação..
Set os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem") For Each obj In os Set prps = obj.Properties_ OSLang = prps("OSLanguage").value BldNum = prps("BuildNumber").value Next if BldNum > 7100 then wscript.echo "Vou rodar no Win7 ou no Win8" win7ou8 if BldNum = 2600 then wscript.echo "Vou rodar no WinXP" winXp end if end if SUB win7ou8 If WScript.Arguments.length =0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Else Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo Set wshShell = CreateObject("WScript.Shell") strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN" 'variavel com destino if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia else if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then objFSO.Copyfile StrOrigem, StrDestino & "\" , true End if End If End If END SUB SUB winXP Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo Set wshShell = CreateObject("WScript.Shell") strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN" 'variavel com destino if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia else if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then objFSO.Copyfile StrOrigem, StrDestino & "\" , true End if End If END SUB
Obs: Vou propor resposta para enviar um alerta..
- Editado Aparecido Deveza quarta-feira, 15 de agosto de 2012 02:55 Info
- Sugerido como Resposta Aparecido Deveza quarta-feira, 15 de agosto de 2012 02:55
- Marcado como Resposta Fábio JrModerator quinta-feira, 16 de agosto de 2012 21:20