Como executar corretamente scripts do Powershell contendo operações do BITS do Agendador de Tarefas?

1

Estou tentando realizar um backup automático de alguns arquivos e pastas com base em uma configuração. Isso é feito usando o Powershell 5, que, por sua vez, depende do Serviço de Transferência Inteligente em Segundo Plano (BITS - Background Intelligent Transfer Service). Por exemplo:

Start-BitsTransfer $Source\* $Destination -RetryInterval 60 -RetryTimeout 600

Os scripts do Powershell são executados usando um morcego:

powershell -ExecutionPolicy unrestricted .\Main.ps1

O lote é executado usando uma tarefa agendada:

User account: AD service account
Run: whether user is logged on or not

Quando executo o lote diretamente usando a mesma conta definida na tarefa agendada, ele funciona perfeitamente. Quando eu o executo no Agendador de Tarefas, as operações do BITS emitem o seguinte erro:

The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist. (Exception from HRESULT: 0x800704DD)

Eu tentei alterar o usuário para o serviço BITS, configurando-o para a mesma conta de serviço que uso para a tarefa agendada, mas o serviço não inicia mais:

The Background Intelligent Transfer Service service failed to start due to the following error:
The account specified for this service is different from the account specified for other services running in the same process.

Voltando à tarefa agendada, mudei para executar "somente quando o usuário está conectado". Claro, isso só faria sentido se eu configurasse o autologon neste usuário (caso contrário, ele não será executado se não estiver logado).

Pergunta: Como posso automatizar um backup usando o BITS sem depender de truques como o login automático?

    
por Alexei 08.03.2018 / 17:26

1 resposta

2

Parece que você só poderá executar esse script quando estiver conectado. Na documentação do MS "Usando o Windows Powershell para criar trabalhos de transferência do BITS", foi encontrado aqui .

When you use *-BitsTransfer cmdlets from within a process that runs in a noninteractive context, such as a Windows service, you may not be able to add files to BITS jobs, which can result in a suspended state. For the job to proceed, the identity that was used to create a transfer job must be logged on. For example, when creating a BITS job in a PowerShell script that was executed as a Task Scheduler job, the BITS transfer will never complete unless the Task Scheduler's task setting "Run only when user is logged on" is enabled.

Tente usar o robocopy em seu lugar.

    
por 08.03.2018 / 19:42