
No Agendador de Tarefas, tenho uma tarefa usando a conta SYSTEM que executa um arquivo em lote. 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?
Responder1
Defina dinamicamente um valor de variável em um script em lote que será executado pelo Agendador de Tarefas
Já que você esclareceu e confirmou o seguinte:
- Você precisa do valor da variável no script em lote que oAgendador de tarefasé executado para
SYSTEM
ser definido como um valor que corresponde ao SID do usuário que executa o script de login- Você pode usar o caminho do arquivo local por máquina para o local do scriptAgendador de tarefasirá executar
- Você nunca terá mais de um usuário acessando o mesmo sistema operacional simultaneamente para executar este script
Escrevi esta solução como uma resposta separada com mais detalhes da abordagem sugerida.
Você vai querer garantir o seguinte:
- Confirme o correlacionado Tarefa agendadao nome é configurado em cada máquina que executará o script em lote localmente
- Confirme se cada um está correlacionadoTarefa agendadaem cada máquina executada com
schtasks
todos apontando para o mesmo caminho de script em lote padrão e nome de arquivo.
Exemplo de script em lote [Login]
Reutilizei a lógica que você já configurou para isso, mas adicionei algumas variáveis extras e condicionaisSElógica que fará com que a pasta local na máquina local o script em lote resida se ainda não existir, eexcluiro arquivo em lote nessa pasta, se ele já existir, uma vez que foi criado por execução.
Essencialmente, isso criará um script em lote dinâmico cada vez que for executado (no login). O script em lote criado conterá a Reg Add
lógica e os comandos com os valores da porção SID sendo os do usuário para o qual o script de login foi executado em seu login. Então quando oAgendador de tarefasexecuta o script, isso garantirá que o script sempre tenha o valor necessário adicionado por login/execução do 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ê instrui schtasks
a executar (ou seja "My Profile Changer"
,) aponte para o mesmo caminho completo especificado no script em lote de login para os valores das variáveis SET LocalDir=
e .SET TaskScript=
Portanto, se as variáveis do script de login forem iguais C:\localfolder\TaskScript.cmd
, esse será o mesmo valor para o qual você deseja que o Program/Script
campo aponte. Eu também sugeriria colocar o SET LocalDir=
valor da variável no Start in (optional):
campo, mas você NÃO precisará adicionar nenhum argumento, então deixe o Add Arguments (optional):
campo em branco ou vazio sem nada nele (abaixo da captura de tela).