none
Script não funciona logon Win7 RRS feed

  • 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.

    terça-feira, 31 de julho de 2012 18:25

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..



    quarta-feira, 15 de agosto de 2012 02:49

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"



    terça-feira, 31 de julho de 2012 22:48
  • 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, copia

     else    
          if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
            objFSO.Copyfile StrOrigem, StrDestino & "\" , true

         End if 
      End If

    o mesmo funciona normal no xp, porem no win7 nao faz nada..nem erro aparece...

    quarta-feira, 1 de agosto de 2012 16:52
  • 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.

    quinta-feira, 2 de agosto de 2012 00:10
  • 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.

    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!

    quinta-feira, 2 de agosto de 2012 15:52
  • 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

    terça-feira, 7 de agosto de 2012 04:09
    Moderador
  • 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..



    quarta-feira, 15 de agosto de 2012 02:49