Executando o script powershell através do Agendador de Tarefas do Windows

1

Estou tentando executar um script PS1 powershell simples no Agendador de Tarefas. As configurações das ações da tarefa são Program: powershell e Add arguments: -executionpolicy bypass -file C:\Users\Robin\Documents\script.PS1 .

O script de objetivo.PS1 é acessado ok, mas uma linha dentro dele (uma chamada para outro script: Rscript Z:\rscript.R ) falha com a mensagem:

Fatal error: cannot open file Rscript Z:\rscript.R
'rscript.R': no such file or directory

Se eu executo a mesma linha manualmente no Powershell, tudo funciona bem. Além disso, o seguinte é executado como um comando Executar: powershell -executionpolicy bypass -file C:\Users\Robin\Documents\script.PS1 , o que sugere que o problema está no Agendador de Tarefas. A tarefa está configurada para ser executada com privilégios mais altos. Estou perplexo.

Muito grato pela ajuda.

    
por geotheory 08.08.2013 / 14:38

5 respostas

2

Estou assumindo que Z: é uma unidade de rede.

Os trabalhos agendados são (geralmente) executados em uma conta do sistema. Unidades de rede geralmente não são mapeadas para o sistema. Mesmo se você alterá-lo para ser executado sob suas credenciais (ou qualquer credencial de usuário específica), você não poderá contar com o compartilhamento de rede acessível. Você precisará:

  1. Execute o segundo script usando um caminho UNC (e certifique-se de que a conta do sistema tenha acesso ao caminho UNC)
  2. Mapeie a unidade de rede no início do seu script (no PowerShell 3 você pode usar o New-PSDrive, mas), a maneira mais simples é executar o comando NET USE Z: \SERVER\SHARE . É claro, você pode precisar adicionar credenciais de usuário: password /USER:domain\user e você também pode tentar adicionar /SAVECRED /PERSISTENT:YES e executar esse comando uma vez e esperar que ele fique (mas eu ainda testaria e remapearia se fosse uma opção).
  3. Opção mais segura: faça uma cópia do arquivo localmente.
por 08.08.2013 / 16:56
1

Por favor, verifique este aqui em stackoverflow, parece um caso bem parecido: Como posso convencer PowerShell (executado através do agendador de tarefas) para encontrar a minha unidade de rede?

    
por 08.08.2013 / 15:54
0

O comando que você tentou de um arquivo em lote estava errado.

Tente este comando e lembre-se de manter as citações.

powershell.exe -file ". 'C:\Users\Robin\Documents\script.ps1'" 
    
por 30.01.2014 / 23:15
0

Parece que o Agendador de Tarefas não gerencia a validação de usuários de domínio corretamente ... Quando você tenta executar o script manualmente, o usuário é identificado como "usuário@domínio.com" Quando você tenta executá-lo pelo Agendador de Tarefas (somente modo offline), o usuário é identificado como "usuário @" sem domínio. Assim, caso o script tente copiar ou fazer qualquer operação de rede que exija a validação do usuário, não haverá nenhum arquivo desse tipo ou erros legais, etc ...

    
por 10.07.2014 / 15:46
0

Embora você já tenha encontrado uma solução para o seu problema, ainda vou postar esta nota para beneficiar outra pessoa. Eu me deparei com um problema semelhante. Basicamente, usei uma conta de domínio diferente para testar e comparar. A tarefa correu muito bem com "Executar se o usuário está conectado ou não" marcado.

Algumas coisas para ter em mente e garantir:

  1. A conta que está sendo usada para executar a tarefa deve ter direitos "Efetuar logon como trabalho em lote" na diretiva de segurança local do servidor (ou ser membro do grupo Admin local). Você deve especificar a conta que precisa para executar scripts / arquivos bat.
  2. Verifique se você está inserindo os caracteres de senha corretos
  3. As tarefas em 2008 R2 não são executadas de forma interativa, especialmente se você as executar como "Executar se o usuário está conectado ou não". Isso provavelmente falhará especialmente se, no script, você estiver procurando por qualquer objeto \ recurso específico de um perfil de usuário quando a tarefa foi criada, pois a sessão do powershell precisará dessas informações para iniciar; caso contrário, ela será iniciada e terminará imediatamente. Como um exemplo para definir $ Path ao executar script como "Executar se o usuário está conectado ou não" e eu especifico uma unidade mapeada. Ele procuraria essa unidade quando a tarefa é iniciada, mas como a conta do usuário validada para executar a tarefa não está conectada e no script que você está se referindo a uma fonte \ objeto com a qual precisa trabalhar, ela não está presente. apenas terminar. unidade mapeada (\ server \ share) x: \ vs. caminho UNC real \ server \ share
  4. Revise seus passos, script, argumentos. Às vezes, a menor peça pode fazer uma grande diferença, mesmo que você tenha feito esse processo várias vezes. Eu perdi várias vezes um caractere ao inserir a senha ou um ponto e vírgula às vezes ao criar um script ou uma tarefa.

Verifique o link fornecido e esperamos que você ou outra pessoa possa se beneficiar dessas informações. Seja seguro.

https://technet.microsoft.com/en-us/library/cc722152.aspx
    
por 06.04.2015 / 21:46