¿Cómo puedo pasar un argumento a una tarea programada?

¿Cómo puedo pasar un argumento a una tarea programada?

En el Programador de tareas tengo una tarea que utiliza la cuenta SISTEMA que ejecuta un archivo por lotes. El usuario (no administrador) tiene otro archivo por lotes que ejecuta la tarea. ¿Cómo puede el lote del usuario establecer una variable que pueda ser utilizada por el lote de la tarea?

Respuesta1

Establezca dinámicamente un valor de variable en un script por lotes que será ejecutado por el Programador de tareas

Ya que usted aclaró y confirmó lo siguiente:

  1. Necesita el valor de la variable en el script por lotes que elProgramador de tareasse ejecuta para SYSTEMestablecerse como un valor que coincida con el SID del usuario que ejecuta el script de inicio de sesión
  2. Puede utilizar la ruta del archivo local por máquina para la ubicación del scriptProgramador de tareasejecutará
  3. Nunca tendrás más de un usuario iniciando sesión en el mismo sistema operativo simultáneamente y ejecutará este script.

Escribí esta solución como una respuesta separada con más detalles del enfoque sugerido.

Querrá asegurarse de lo siguiente:

  • Confirmar la correlación Tarea programadaEl nombre se configura en cada máquina que ejecutará el script por lotes localmente.
  • Confirme que cada uno está correlacionadoTarea programadaen cada máquina que se ejecuta, schtaskstodos apuntan a la misma ruta de script por lotes estándar y nombre de archivo.

Ejemplo de script por lotes [iniciar sesión]

Reutilicé la lógica que ya tienes configurada para esto, pero agregué algunas variables adicionales y condicionales.SIlógica que hará que la carpeta local en la máquina local resida el script por lotes si aún no existe, yborrarel archivo por lotes en esa carpeta si ya existe, ya que se crea por ejecución.

Básicamente, esto creará un script por lotes dinámico cada vez que se ejecute (al iniciar sesión). El script por lotes que crea contendrá la Reg Addlógica y los comandos, siendo los valores de la porción SID los del usuario para el que se ejecutó el script de inicio de sesión en su inicio de sesión. Así que cuando elProgramador de tareasejecuta el script, esto garantizará que el script siempre tenga el valor agregado necesario por inicio de sesión/ejecución del 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"

Tarea programada

Solo necesitará asegurarse de que la tarea que le indique schtasksejecutar (es decir "My Profile Changer", ) apunte a la misma ruta completa que especificó en el script por lotes de inicio de sesión para los valores de las variables SET LocalDir=y .SET TaskScript=

Entonces, si las variables del script de inicio de sesión son iguales C:\localfolder\TaskScript.cmd, entonces este es el mismo valor al que desea Program/Scriptque apunte el campo. También sugeriría poner el SET LocalDir=valor de la variable en el Start in (optional):campo, pero NO necesitará agregar ningún argumento, así que deje el Add Arguments (optional):campo en blanco o vacío sin nada en él (captura de pantalla debajo).

ingrese la descripción de la imagen aquí


Recursos adicionales

información relacionada