Execute .vbs no Agendador de Tarefas. VBS deve executar um .exe via shell

4

Eu não estaria postando se eu tivesse tentado a pletora de possíveis soluções que foram postadas sobre isso anteriormente.

Eu desenvolvi um software, que usando um arquivo .vbs ( exporter.vbs ) executa um .exe de outro software ( reporter.exe ) , que está instalado na máquina do cliente.

Cenários de casos de uso

A execução manual do exporter.vbs (clique direito e aberto) funciona perfeitamente, exatamente como esperado. Quando executado na minha própria máquina através do Agendador de Tarefas como meu próprio usuário do Windows, ele funciona perfeitamente, exatamente como esperado.

Quando executado manualmente em uma caixa do Windows Server 2008/2012, ele funciona perfeitamente, exatamente como esperado. Quando executado através do Agendador de Tarefas como qualquer usuário (excluindo o grupo Administradores), o Agendador de Tarefas informa como 0x0, no entanto, o reporter.exe não gerou os arquivos conforme o esperado.

Quando executado em uma caixa do Windows Server 2008/2012 através do Agendador de Tarefas em execução como o Administrador , ele funciona, no entanto, durante a noite (quando a tarefa está definida para ser executado), ele não é executado.

Configuração da tarefa agendada - Geral

Configuraçãodatarefaagendada-Ações

Osscripts

Noscenáriosacima,oexporter.vbspareceestardesanimandonesseestágiodoscriptenquantoasoutraspartesdoscriptestãoemexecução(aoutrapartedoscriptesvaziaoXMLdedestinoarquivos).

FunctionExport(filepath,report)dimfsosetfso_tidy=CreateObject("Scripting.FileSystemObject")

    if fso_tidy.FileExists(filepath)=true then

        set fso_tidy = nothing

        set oShell = CreateObject("WScript.Shell")
        oShell.Run """"&simsdir&"\CommandReporter.exe"" /QUIET /user="""&simsu&""" /password="""&simsp&""" /REPORT:"""&report&" v"&rptv&""" /OUTPUT:"""&filepath&"""", 0, true

        set oShell = nothing

        set fso_tidy = CreateObject("Scripting.FileSystemObject")
        set objFile = fso_tidy.GetFile(filepath)

        if objFile.size > 64 then
            size = round(objFile.size / 1024, 1)
            WriteToLog "DATA", "(OK) "&report&" EXPORTED (size: "&size&"kb)"
        else
            WriteToLog "DATA", "(FAILED) "&report&" EXPORTED (size: "&size&"kb)"
        end if

        set objFile = nothing

    end if

    set fso_tidy = nothing
end Function

Esta função é chamada 5 vezes, uma vez para cada relatório que precisamos exportar dados do Software.

O que já foi tentado

  • Permissões completas de usuário na pasta do meu software
  • Tentou executar como todos os usuários, seja local ou de domínio no servidor do cliente
  • Tentei executar o vbs usando o cscript.exe

Há algo que estou perdendo em termos de como o vbs precisa ser executado no Agendador de Tarefas se eles manipularem arquivos, etc.

    
por itsphilz 21.09.2015 / 16:37

1 resposta

0

Você tem a tarefa definida para ser executada no contexto da conta do sistema local. A conta do sistema não é um usuário interativo completo, portanto nem tudo será executado nesse contexto. Você deve ter as seguintes considerações em mente ao usá-lo para tarefas:

  • Sistema local apresenta as credenciais da conta do computador na rede (por exemplo, COMPUTERNAME$ ), portanto, se filepath estiver em um compartilhamento de rede, a conta do computador local deve ter permissões específicas (ou o grupo Todos). / li>
  • O Sistema Local não possui um perfil de usuário (tecnicamente, mas não há nada nele). Qualquer coisa que se refira a uma configuração de registro por usuário ou localização do sistema de arquivos provavelmente falhará.
  • Os processos em execução como Sistema local não podem interagir com o usuário, portanto, se o script exibir uma caixa de diálogo, o usuário não a verá.

Tente executar sua tarefa como uma conta local ou de domínio autêntica em vez da conta do sistema. É claro que você precisa inserir a senha na tarefa para que isso funcione.

    
por 27.10.2015 / 19:14