O script do Windows Server 2008 R2 PowerShell é executado manualmente, mas não como uma tarefa agendada

4

Eu tenho um script do PowerShell que é executado manualmente usando o ISE do PowerShell . No entanto, quando executada como uma tarefa agendada usando as credenciais de um administrador, a tarefa não é executada com os resultados esperados.

O script:

$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")

O usuário administrador tem Controle total do script e da pasta para a qual está gravando. A URL existe e responde em um tempo razoável (menos de um segundo).

Se eu executar a tarefa manualmente, o status será 0x41301 ("Executando atualmente") até que eu termine com ela. Eu configurei a tarefa usando os dois métodos:

  1. Iniciar um programa: C:\path\to\PS.PS1
  2. Iniciar um programa: C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe com opções adicionais -noninteractive -command "C:\path\to\PS.PS1"

Usando a opção 1, o histórico de tarefas mostra que abriu uma instância do notepad.exe, mas nunca a finaliza. Usando a opção 2, ela conclui a tarefa, mas não faz o download / cria o arquivo.

Eu usei Set-ExecutionPolicy Unrestricted porque este não é um script assinado.

Como posso resolver este problema?

    
por Aeisor 04.05.2013 / 12:15

4 respostas

5

Como você está executando um arquivo de script em vez de um bloco de script, o parâmetro que você deve usar é -File.

Além disso, a configuração da política de execução usando o cmdlet Set-ExecutionPolicy não garante que o script seja executado nesse contexto. A diretiva de execução efetiva pode ser substituída pela diretiva de grupo (GPO). Para forçar isso na execução do arquivo, use o parâmetro -ExecutionPolicy

O comando que você está procurando é o seguinte

powershell.exe -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File c:\path\ps.ps1

Mais informações sobre esses parâmetros podem ser encontradas aqui .

    
por 11.05.2013 / 15:59
1

O arquivo de script que você está tentando executar não é um arquivo confiável nativamente. Use um e comercial antes do caminho do arquivo para executar o comando:

Powershell.exe -ExecutionPolicy Unrestricted -Command { & 'C:\path\to\PS.PS1' }

Outros parâmetros de inicialização do PowerShell podem ser encontrados em Ajuda da linha de comando do PowerShell.exe .

    
por 21.06.2013 / 20:36
0

Você pode confirmar sua política de execução para todos os escopos, por:

Get-ExecutionPolicy -List

Se você definir a política LocalMachine como RemoteSigned , poderá ter uma definição de tarefa como:

Iniciar em: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0

Executar: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -NoLogo -Arquivo c: \ caminho \ para \ ps.ps1

    
por 21.06.2013 / 23:17
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:44