Como posso passar um argumento para uma tarefa agendada?

1

No Agendador de Tarefas, tenho uma tarefa usando a conta SYSTEM que executa um arquivo em lotes. O usuário (não administrador) possui outro arquivo em lote que executa a tarefa. Como o lote do usuário pode definir uma variável que pode ser usada pelo lote da tarefa?

    
por Jason 21.06.2017 / 18:27

1 resposta

1

Defina dinamicamente um valor variável em um script em lote que será executado pelo Agendador de Tarefas

Since you clarified and confirmed the following:

  1. You need the variable value in the batch script that the Task Scheduler executes as SYSTEM to be set to as a value that matches the SID of the user that runs the login script
  2. You can use local file path per machine for the script location the Task Scheduler will execute
  3. You will never have more than one user signing onto the same OS concurrently that'll execute this script

Eu escrevi esta solução como uma resposta separada com mais detalhes da abordagem sugerida.

You will want to ensure the following:

  • Confirm the correlated Scheduled Task name is setup on each machine that will execute the batch script locally
  • Confirm that each correlated Scheduled Task on each machine that is executed with schtasks all point to the same one standard batch script path and file name.

Exemplo de script em lote [login]

Eu reutilizei a lógica que você já configurou para isso, mas adicionei algumas variáveis extras e uma lógica IF condicional que fará com que a pasta local na máquina local o script em lote residirá, se ainda não existir, e exclua o arquivo em lote essa pasta, se já existir, desde que seja criada por execução.

Essencialmente, isso criará um script em lote dinâmico toda vez que for executado (no login). O script em lote que ele cria conterá a lógica Reg Add e os comandos com os valores da porção SID, que são do usuário que o script de login executou em seu login. Portanto, quando o Task Scheduler executa o script, isso garante que o script sempre tenha o valor necessário adicionado por login / execução de script.

@ECHO ON

SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd

IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"

for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i

ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"

schtasks /run /tn "My Profile Changer"

Tarefa agendada

Você só precisará garantir que a tarefa que você informa o schtasks a executar (ou seja, "My Profile Changer" ) aponte para o mesmo caminho completo que você especifica no script de lote de login para o SET LocalDir= e SET TaskScript= de valores de variáveis.

Portanto, se as variáveis do script de login forem iguais a C:\localfolder\TaskScript.cmd , esse será o mesmo valor para o qual você deseja que o campo Program/Script aponte. Também sugeriria colocar o valor da variável SET LocalDir= no campo Start in (optional): , mas você NÃO precisará adicionar nenhum argumento, então deixe o campo Add Arguments (optional): em branco ou vazio com nada nele ( abaixo da captura de tela ).

Maisrecursos

por 22.06.2017 / 00:07