O Agendador de Tarefas do Windows não executará o arquivo em uma unidade que não seja do sistema

1

Eu tenho um executável que precisa ser executado em uma unidade E: /, o Windows Server 2012 está instalado na unidade C: /. Eu criei uma tarefa agendada que tem o caminho completo para o executável de destino (E: /stuff/target.exe) e tem o diretório de trabalho definido (E: / stuff /).

Isso falha, o agendador de tarefas informa que o nome do diretório é inválido. Se eu remover o diretório de trabalho, ele me diz que o acesso foi negado. Isso não pode estar certo, a unidade inteira é compartilhada e tem permissões de arquivo definidas para "todos" com controle total. A conta que executa a tarefa pode definitivamente executá-lo (eu posso fazê-lo através de cmd.exe). Sidenote: Eu tentei todas as permutações do caminho, usando barras invertidas, barras, aspas e não-aspas. Isso não se deve a KB2452723 .

Eu tentei ter um arquivo em lotes que usa "CD" para definir o diretório de trabalho para E: / stuff /, em seguida, chamar o programa, que funciona quando eu executá-lo. Infelizmente, quando executado pelo Agendador de Tarefas, ele nunca altera o diretório de trabalho e tenta chamar target.exe da unidade do sistema (onde ele não existe).

Eu também tentei criar um link simbólico ("mklink / D") de C: / temp / para E: / stuff /, na esperança de que eu pudesse enganar o agendador de tarefas, mas ele não seguiria o link, e me diz que o diretório não pôde ser encontrado.

Não consigo entender por que o agendador de tarefas lutaria tanto com isso, nem qual seria a prática correta para que isso funcionasse. Alguém já executou com sucesso um arquivo em uma unidade que não seja do sistema com o agendador de tarefas?

    
por Knetic 22.07.2013 / 02:08

2 respostas

5

Depois de bater a cabeça contra a parede por algumas horas, encontrei uma solução. Parece que no Server 2012, as tarefas agendadas não podem tocar em diretórios que não têm permissões de permissão explícitas para a conta que você está usando para executar o arquivo. Não importa se essa conta está em um grupo que é permitido no diretório.

Por exemplo, se eu quiser rodar o E: /stuff/target.exe usando a conta THINGS \ svcAccount, então THINGS \ svcAccount deve ter um controle total explícito sobre E: / stuff para executar . Eu tinha assumido que, se THINGS \ svcAccount estivesse no grupo de administradores, e o grupo de administradores tivesse controle total sobre E: / stuff, herdaria permissões. O Server 2012 não faz isso.

Isso só parece se aplicar a tarefas agendadas - executando uma janela de comando ou uma janela do powershell, pois THINGS \ svcAccount funciona exatamente como esperado.

    
por 22.07.2013 / 20:05
3

Os mapeamentos de unidade não são vistos por serviços ou tarefas. Use um caminho UNC.

\server\share\directory\someprogram.exe

Outra opção é agendar um arquivo em lotes para ser executado e incluir um mapeamento de unidade lá. Em um arquivo em lotes, é mais fácil usar pushd / popd para mapear sem se preocupar com a letra da unidade que recebe (o pushd pode mapear para uma letra de unidade e alternar para essa letra de unidade, o popd pode desmapear e retornar à letra da unidade anterior).

pushd \server\share
\directory\someprogram.exe
popd
    
por 22.07.2013 / 04:15