Unidade mapeada não está acessível, para copiar arquivos, usando o Agendador de Tarefas

1

Na minha máquina Windows Server 2008 R2, um arquivo em lotes está agendado para ser executado usando o Agendador de Tarefas. Por algum motivo, somente uma parte dos comandos no arquivo de lote é executada; Alguns comandos do MS-DOS são ignorados.

O arquivo MS Dos Batch se parece com isto:

s:
cd "S:\Reports\"
sqlcmd -S ipAddress -U login -P password -d dbname -i "S:\query.sql" -o "S:\Folder\Report.txt"
copy /A /Y "S:\Folder\Report.txt" Y:\

Quando eu executo o arquivo em lotes clicando duas vezes nele, tudo é executado como pretendido; Mas quando é executado a partir do agendador de tarefas, apenas a parte sqlcmd é executada corretamente. O comando de cópia parece não rodar.

O Y: \ é uma unidade mapeada sob o mesmo login. Depois de digitar minha pergunta até agora, voltei e fiz mais um teste. Curiosamente, se eu substituir a unidade mapeada pela unidade local, tudo parece estar funcionando bem. Então, neste ponto, parece que a unidade mapeada é o problema. Alguma idéia sobre como resolver isso?

Essencialmente, como copiar ou mover arquivos para uma unidade mapeada (máquina diferente) usando o arquivo de lote executado a partir do Agendador de Tarefas?

ToC
fonte
1
Se você registrar o que está acontecendo adicionando >x:\dir\Batch.log 2>&1à primeira linha e >>x:\dir\Batch.log 2>&1a cada um dos outros, você deve ver qual é o problema quando examina x:\dir\Batch.log( xe diré uma unidade e um diretório de sua escolha).
AFH
@AFH Obrigado pela ideia. Recebi um comentário diferente que ajudou a corrigir esse problema. A ideia era usar o caminho UNC, em vez de usar letras.
ToC
@briantist deu a ideia.
ToC
Analisando a resposta, notei que as unidades de rede estão inacessíveis para programas iniciados por meio de "Executar como administrador". Presumivelmente, restrições semelhantes se aplicam a programas iniciados no Agendador de Tarefas. Vale a pena ter em mente.
AFH

Respostas:

1

@briantist (resposta copiada de)

S:e Y:provavelmente são unidades de rede mapeadas, mas elas são mapeadas no contexto de uma sessão do usuário. A tarefa agendada será executada em sua própria sessão e não terá essas unidades mapeadas.

Você deve usar o caminho UNC do compartilhamento instead ( \\server\share), pois isso deve funcionar em qualquer um dos contextos (contanto que o compartilhamento esteja acessível para o usuário em que a tarefa agendada está sendo executada).

ToC
fonte