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:
- 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- You can use local file path per machine for the script location the Task Scheduler will execute
- 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 ).