VBScript no Windows 7 Tarefa agendada de 64 bits - Funciona somente com execução quando conectado

2

Então, basicamente eu tenho este VBScript que abre uma instância do Excel 2010, executar uma macro e fechar a planilha. Eu estou chamando-o usando a tarefa agendada para automatizá-lo. Ele funcionou muito bem quando eu estava no Windows XP, mas recentemente minha empresa atualizou para o Windows 7 e quando tentei agendá-lo usando o novo Agendador de Tarefas no Windows 7, a tarefa estava travada no status de execução, mas nada foi executado se eu escolher Executar se o usuário está logado ou não, com ou sem executar com privilégios mais altos verificados. No entanto, se eu usar Executar somente quando o usuário estiver conectado, tudo será executado corretamente.

Aqui estão algumas coisas que tentei testar / verificar o problema:

  1. O mesmo script pode ser agendado no Windows XP com a tarefa agendada, sem a necessidade de o usuário fazer logon. O próprio script, é claro, funcionaria quando eu clicasse duas vezes nele.

  2. Outro script que não usa a instância do Excel pode ser agendado sem qualquer problema.

  3. Eu criei um arquivo .bat para chamar o script VBS e usar o agendador de tarefas do Windows para agendar o arquivo bat sem sorte. O arquivo bat é uma linha de código:

    C: \ Windows \ System32 \ CScript.exe // Nologo // B "C: \ meuscript.vbs"

    Quando eu corri, mostrei que a tarefa estava concluída, mas nada foi lançado nem executado.

    Outras coisas que tentei incluem o uso do CMD como o programa./script e / c start "" "C: \ myscript.vbs" como o argumento, ou usando C: \ Windows \ System32 \ CScript.exe como o programa / script e // Nologo // B "C: \ myscript.vbs" como argumento. Tudo sem sorte.

  4. O Excel nem sequer foi lançado nesse caso, pois não vejo nenhum processo adicional do Excel no gerenciador de tarefas.

  5. Parece haver uma opção para agendar a tarefa no modo de compatibilidade com o Windows XP, mas quando tentei clicar com o botão direito e selecionar Propriedades, na guia Geral, a única coisa que vejo no Configure for: é o Windows 7 e o servidor 2008 R2, a segunda opção é o Windows Vista e o servidor 2008.

  6. Minha conta tem privilégios de administrador no PC.

Portanto, existe alguma maneira de programar esse script de alguma forma para executar sem a necessidade de eu fazer logon? Estou aberto a qualquer opção. O PC está no Windows 7 Enterprise 64 bit com o Excel 2010 instalado.

Agradecemos antecipadamente por sua ajuda!

    
por zhuanyi 23.05.2013 / 16:59

2 respostas

1

Corrigindo problemas da Diretiva de Grupo usando arquivos de log

Ativar o registro em log das extensões do cliente do Editor de objeto de diretiva de grupo

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
GPTextDebugLevel REG_DWORD 0x30002

0 / ver registros:

 %windir%\debug\usermode\gptext.log

1/32-bit run vbscript:

%windir%\syswow64\cscript.exe "C:\myscript.vbs"

2 / Os programas talvez não consigam acessar alguns locais de rede depois que você ativa o Controle de Conta de Usuário no Windows Vista ou em Windows 7

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections" REG_DWORD 1

3 / Desativar o UAC

linha de comando:

vbs-32.cmd ExcelSheetName.vbs ExcelSrc.xls

vbs-32.cmd:

SET WSH32=%windir%\SysWOW64\cscript.exe
%WSH32% %*

SheetName.vbs:

'Microsoft ActiveX Data Object 2.8 Library
'Microsoft ADO Ext. 2.8 for DDL And Security

Const ArrSize = 100
Dim ArrSheetName()
ReDim ArrSheetName(ArrSize)
IndexArr = 0

IF WScript.Arguments.Count = 0 Then
        WScript.Echo "Script Usage:"
        WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs [Excel file full path]"
        WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs D:\Office\ExcelSrc.xls"
       Wscript.Quit(10)
End If

Dim ExcelFileName
ExcelFileName=WScript.Arguments(0)

Dim ADOCatalog, ADOTable, ADODBConnection

Set ADOCatalog      = Createobject("ADOX.Catalog")
Set ADOTable        = Createobject("ADOX.Table")
Set ADODBConnection = CreateObject("ADODB.Connection")

Dim strConnString, strSheetName

strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ExcelFileName & ";Extended Properties=Excel 8.0;"

ADODBConnection.Open strConnString
Set ADOCatalog.ActiveConnection = ADODBConnection

For Each ADOTable In ADOCatalog.Tables
strSheetName = ADOTable.Name
strSheetName = Replace(strSheetName, "'", "")
strSheetName = Left(strSheetName, InStr(1, strSheetName,"$", 1)-1)
'Wscript.Echo strSheetName
ArrSheetName(IndexArr)=strSheetName
IndexArr=IndexArr+1

Next
ReDim Preserve ArrSheetName(IndexArr-1)

ADODBConnection.Close

Set ADOCatalog      = Nothing
Set ADOTable        = Nothing
Set ADODBConnection = Nothing

For Each ArrValue in ArrSheetName
    Wscript.Echo ArrValue
Next
    
por 23.05.2013 / 18:03
0

Eu tive o mesmo problema e lutei com isso por alguns meses. Finalmente recorreu a chamar a Microsoft para alguma ajuda. A correção não é algo que eu já encontrei, então espero que isso ajude os outros também. O script rodaria bem quando eu o lançasse no Powershell (e na linha de comando), mas quando ele fosse lançado como uma tarefa agendada, ele seria executado, mas não com os resultados esperados. Microsoft me informa que o meu problema é com o Excel em execução no "modo não interativo", você precisa de dois diretórios para ser criado.

  • Você precisa criar uma pasta (ou duas em janelas de 64 bits):

(32Bit, sempre) C: \ Windows \ System32 \ config \ systemprofile \ Desktop

(64 bits) C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

O MS Excel quando você está tentando executar no modo não interativo irá procurar por isso, se ele não estiver presente, ele não será aberto no modo não interativo.

uma vez que estes foram criados, a tarefa agendada é executada sem falhas.

    
por 24.09.2014 / 13:44