Questão Como executar uma tarefa agendada com “schtasks” sem abrir uma nova janela de linha de comando?


Eu tenho um arquivo em lotes que cria uma tarefa agendada usando schtasks como isso:

schtasks /create /tn my_task_name 
                 /tr "...\my_path\my_task.bat"
                 /sc daily
                 /st 10:00:00 
                 /s \\my_computer_name 
                 /u my_username    
                 /p my_password

Ele funciona bem, exceto o fato de que, quando my_task.bat é executado - uma nova janela de linha de comando é aberta (e fechada após a execução).

Gostaria de evitar a abertura desta nova janela (ou seja, executar a tarefa no modo silencioso, em segundo plano).

Eu pensei em usar

start /b ...\my_path\my_task.bat

mas eu não sei como, porque desde que eu tenho que ligar start do arquivo de lote eu preciso precedê-lo com cmd /c, o que novamente faz com que a nova janela seja aberta.

Como eu poderia resolver esse problema?


6


origem




Respostas:


Acredito que você está vendo a caixa porque a conta que você configurou para executá-la é sua. Tente um destes:

1: executar a tarefa como o usuário NT Authority \ System

2: crie uma nova conta e defina a tarefa para ser executada com suas credenciais


3



Você poderia adicionar mais detalhes sobre a primeira opção? Eu realmente não entendo o que Authority\System é. Muito obrigado ! - Misha Moroshko
@Misha: NT Authority \ System é uma espécie de conta do sistema não anunciada que é responsável pela execução dos serviços básicos do Windows. Coisas que acontecem o tempo todo, em muitos casos, exigem credenciais e essa é a maneira como o Windows lida com isso. Pressione ctrl + alt + del, abra o gerenciador de tarefas e vá para os processos. Você verá muitos que estão listados como usuário "Sistema". Isso é NT Authority \ System. Quando você for configurar a tarefa usando o NT Authority \ System, não precisará digitar uma senha. Apenas deixe isso em branco. - Flotsam N. Jetsam
Tentei definir /u "NT Authority\System" /p ""e obteve o seguinte erro: ERROR: Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again... O que estou fazendo de errado ? - Misha Moroshko
Isso soa como se você já tivesse algo em seu arquivo de lote aberto com suas próprias credenciais - talvez uma unidade de rede. Eu precisaria ver o seu arquivo de lote (mytask.bat) para responder inteligentemente. - Flotsam N. Jetsam


Você pode fazer isso especificando a opção / RU para schtasks. Esta opção

especifica a conta do usuário (usuário   contexto) em que a tarefa é executada.   Para a conta do sistema, os valores válidos   são "", "NT AUTHORITY \ SYSTEM" ou   "SISTEMA".

E assim, tente isso

schtasks /create /tn my_task_name 
                  ....
                 /st 10:00:00 
                 /ru "SYSTEM"
                 ....

3



Então, para alguns valores de /RU a janela da linha de comando foi suprimida? Quais? Isto está documentado em algum lugar? - martineau
Não. Eu nem tentei encontrar. Eu encontrei esta solução para resolver o meu problema em algum post e utilizei-o. - pmod


Talvez usando o AT comando e não incluem o /interactive interruptor.

Exemplo:
AT \\my_computer_name 10:00AM /EVERY:M,T,W,Th,F,S,Su "...\my_path\my_task.bat"

Se você precisar de credenciais específicas para que o my_task.bat seja executado, você deverá colocar RUNAS no comando porque eu acreditam o comando será executado no contexto de segurança do serviço Agendamento (Agendador de Tarefas), que é a conta "Sistema Local". Adicionando o RUNAS comando e alterna antes de você arquivo BAT deve corrigir isso.


1





Finalmente, usei este código para resolver o problema:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "...\my_task.bat" & Chr(34), 0
Set WshShell = Nothing

salvou em run_my_task.vbs e agendado run_my_task.vbs com schtasks como acima.


1



Tudo o que funciona. - Flotsam N. Jetsam