Este team redactor ha estado horas investigando para dar soluciones a tu pregunta, te brindamos la soluciones de modo que nuestro objetivo es que resulte de mucha ayuda.
Solución:
Siga los pasos a continuación para solucionar y resolver su problema
Propiedades del programador de tareas. . .
Desde Windows Task Scheduler
en el trabajo propiedades(vea la parte inferior de la mayoría de las capturas de pantalla) en el. . .
-
1.General pestaña, asegúrese de que las siguientes opciones estén seleccionadas / marcadas o desmarcadas tal como se muestra en Imprimir pantalla A
- Desmarcar
Run only when user is logged on
- Cheque
Run whether user is logged on or not
- Cheque
Run with the highest privileges
- Desmarcar
-
2.Condiciones pestaña, asegúrese de que las siguientes opciones sean Seleccione, comprobado, o desenfrenado tal como se muestra en Imprimir pantalla B
- Cheque
Wake the computer to run this task
- Cheque
-
3.Comportamiento pestaña, haga clic en Editar, y asegúrese de que el
Start in (optional)
se establece tal como se muestra en el siguiente ejemplo (NO poner comillas dobles a su alrededor) para la ruta completa que apunta a donde se encuentra el script por lotes SIN una barra invertida final “” Imprimir pantalla C
CONSIDERACIONES DE SEGURIDAD
-
Una vez que presiona OK (2. arriba) debería solicitarle la credencial para ejecutar esto como, y esa credencial es lo que necesitará acceso a
EXECUTE
el archivo por lotes donde exista, y también necesitará acceso para hacer lo que sea que se esté ejecutando en el archivo por lotes que haya programado. -
Puede ser mejor configurar una cuenta de usuario de servicio / proxy estático para este proceso y luego usar sus credenciales para ejecutar el proceso. Debería asegurarse de que su contraseña sea segura y esté configurada para que nunca caduque, y necesita acceso a
EXECUTE
el lote y ejecute lo que sea que se esté ejecutando el proceso de secuencia de comandos por lotes y los comandos y recursos, etc. también utiliza. -
Parece la opcion
Run whether user is logged on or not
DEBES marcar la opciónRun with highest privileges
para que realmente se ejecute como se espera desde el Programador de tareas.
Comprobación de errores
-
Si hay un problema con el script por lotes real pero Windows Programador de tareas en realidad lo ejecuta para ejecutarlo, pero la lógica del script por lotes falla, etc.por cualquier motivo, el Programador de tareas Puede que no vea esta falla en este nivel. Desde su perspectiva (de forma predeterminada la mayor parte del tiempo), está ejecutando el archivo por lotes, de modo que siempre que pueda ejecutarlo y tenga acceso para hacerlo, su trabajo se realiza correctamente.
-
Agregar comprobación de errores o Inicio sesión a la lógica del script por lotes para captura (o solucionar problemas) problemas en este nivel, incluida la garantía de que el contexto de seguridad en el que lo ejecuta el programador por lotes tiene el acceso adecuado a los comandos, recursos, etc., con los que se ejecuta el script por lotes.
Consideraciones sobre políticas de grupo
VERIFICAR LA POLÍTICA DEL GRUPO E INICIAR SESIÓN COMO LOTE PERMISOS DE TRABAJO
Respuesta:En Windows, este privilegio se otorga a través del Local o Política de seguridad de dominio. Para hacer esto usando el política de seguridad local, sigue estos pasos.
- En el Panel de control, abierto Herramientas administrativas, luego Seguridad local
Política.- Bajo Configuraciones de seguridad, abierto Políticas locales y resaltar Asignación de derechos de usuario.
- Localizar Inicie sesión como un trabajo por lotes. Abre el propiedades y agregue los usuarios que necesiten este derecho.
- Cuando esté terminado, ahorrar sus cambios y cierre el Configuración de seguridad local ventana.
Sus cambios deberían tener efecto de inmediato. Para realizar cambios en la Política de seguridad del dominio, en un controlador de dominio, use el Utilidad de política de seguridad de dominio en el Panel de control
Lógica de secuencia de comandos por lotes con unidades asignadas o ruta UNC completa y problemas. . .
Si su secuencia de comandos hace referencia a una unidad de red asignada, pero desea Run whether the user is logged on or not
, entonces, en este contexto, es posible que la asignación de unidades no esté realmente allí para que el proceso por lotes haga lo que se espera.
Si es posible, utilice UNC
rutas en su lógica de secuencia de comandos por lotes en lugar de una letra de unidad asignada para evitar problemas. De lo contrario, es posible que deba utilizar PUSHD \ServerNameShareName
al comienzo del proceso por lotes y luego use POPD
al final del proceso por lotes. Podrías mapear la unidad con NET USE X: \ServerNameShareName
al comienzo del proceso por lotes y luego desconecte la unidad con NET USE X: /DELETE
al final del proceso por lotes.
- USO NETO
- PUSHD
- POPD
Pantallas de impresión
Imprimir pantalla A
Imprimir pantalla B
Imprimir pantalla C
Ejemplos de secuencias de comandos por lotes de WinSCP
A continuación se muestran dos ejemplos muy básicos y simplificados de un script FTP para cargar y un script FTP para descargar desde un servidor FTP usando WinSCP.com
. Asegúrate de SET winscplogin=
La variable se establece en el nombre de la conexión FTP que ha definido desde la GUI de WinSCP.
De esta manera, crea el script dinámicamente y usted crea los comandos FTP desde el script por lotes, pero también puede simplemente apuntarlo a un script WinSCP estático con los comandos FTP en ellos, de lo contrario, también es fácil de configurar.
Subir a un servidor FTP
@ECHO ON
SET logfile=C:folderpathlog.log
::SET WinSCP variables, etc.
SET prgwinscp="C:Program FilesWinSCP3WinSCP.com"
SET winscplogin="ABC Company"
SET winscpfile=C:folderpathABCompany_FTP_OUT_WinSCP.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
:ftpout
ECHO. >> "%logfile%"
ECHO *******************FTP OUT******************* >> "%logfile%"
ECHO Delivering file(s) to ABC Company FTP server >> "%logfile%"
SET ftpdir="ToABC"
ECHO option batch on >> %winscpfile%
ECHO option confirm off >> %winscpfile%
ECHO option transfer binary >> %winscpfile%
ECHO open %winscplogin% >> %winscpfile%
ECHO cd %ftpdir% >> %winscpfile%
ECHO put "C:FolderPath*.*" >> %winscpfile%
ECHO dir >> %winscpfile%
ECHO close >> %winscpfile%
ECHO exit >> %winscpfile%
ECHO %winscpfile% >> "%logfile%"
TYPE %winscpfile% >> "%logfile%"
ECHO - - - - - - - - - - - - - - - - - - - - - - >> "%logfile%"
%prgwinscp% /script=%winscpfile% >> "%logfile%"
ECHO - - - - - - - - - - - - - - - - - - - - - - >> "%logfile%"
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO Transmission complete >> "%logfile%"
Descarga desde un servidor FTP
@ECHO ON
SET logfile=C:folderpathlog.log
::SET WinSCP variables, etc.
SET prgwinscp="C:Program FilesWinSCP3WinSCP.com"
SET winscplogin="ABC Company"
SET winscpfile=C:folderpathABCompany_FTP_IN_WinSCP.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
:ftpin
ECHO. >> %logfile%
ECHO *******************FTP IN******************* >> %logfile%
ECHO Retrieving files from ABC Company server >> %logfile%
SET ftpdir="FromABC"
ECHO option batch on >> %winscpfile%
ECHO option confirm off >> %winscpfile%
ECHO option transfer binary >> %winscpfile%
ECHO open %winscplogin% >> %winscpfile%
ECHO cd %ftpdir% >> %winscpfile%
ECHO ls >> %winscpfile%
ECHO get "*.*" "C:Folderpath" >> %winscpfile%
ECHO close >> %winscpfile%
ECHO exit >> %winscpfile%
ECHO %winscpfile% >> %logfile%
TYPE %winscpfile% >> %logfile%
ECHO ------------------------------------------- >> %logfile%
%prgwinscp% /script=%winscpfile% >> %logfile%
ECHO ------------------------------------------- >> %logfile%
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO FTP Downloading Complete >> %logfile%
ECHO Transmission complete >> %logfile%
Scripts de ejemplo personalizados
Asegúrese de utilizar las dos opciones de Run whether user is logged on or not
y Run with the highest privileges
cuando programe la secuencia de comandos por lotes. Una vez que aplique estos cambios, deberá ingresar las credenciales para ejecutar la tarea de manera explícita. Asegúrese de utilizar una cuenta que tenga acceso de ejecución al C:Program Files (x86)WinSCPWinSCP.com
archivo y que también cumpla con los otros requisitos previos generales que se enumeran anteriormente.
Si aún tiene problemas y desea confirmar que no está relacionado con la seguridad del sistema operativo, cree una nueva cuenta local en la máquina y asígnele una contraseña segura, configúrela para que nunca caduque y para que se ejecuten como permisos por lotes. También puede convertirlo en un administrador local y probarlo solo para ser minucioso y ver si otorgar acceso de administrador local a la cuenta en la máquina hace alguna diferencia.
Esto significaría que tiene dos archivos: un script por lotes y un WinSCP. El script por lotes pasará el script WinSCP a WinSCP.com y usted puede ejecutarlo para ejecutar el proceso. Asegúrese de que este script funcione como el mismo usuario mientras está conectado simplemente ejecutándolo para probar y luego probar con esa misma cuenta mientras está conectado a la sesión de la máquina con el Run only when user is logged on
opción para confirmar que funciona desde el Programador de tareas también antes de configurarlo para que se ejecute, ya sea que haya iniciado sesión o no, etc.
El programador de tareas Actions
solo usará la pestaña Program/Script:
campo con todos los demás campos en blanco, pero el Program/Script:
el campo tendrá un valor de C:folderpathyourbatchscript.cmd
.
Script por lotes
@ECHO ON
SET prgwinscp="C:Program Files (x86)WinSCPWinSCP.com"
%prgwinscp% /script=lock-arch.winscp
EXIT
Secuencia de comandos WinSCP
open sftp://[email protected]:2222/ -hostkey="ssh-rsa 2048
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
call cinnamon-screensaver-command -d
close
exit
Resolví esto omitiendo los tipos de disparador “En el bloqueo / desbloqueo de la estación de trabajo” y estableciendo los disparadores para mirar el registro de eventos de Windows directamente.
No es ideal, pero debería ser sostenible. Sin embargo, definitivamente todavía tengo curiosidad por saber por qué los activadores proporcionados por el Programador de tareas no funcionan.
Configurar eventos de bloqueo / desbloqueo
De forma predeterminada, los eventos de bloqueo / desbloqueo no se auditan en el registro de eventos, deberá habilitar el registro de estos eventos. Puede hacerlo desde el editor de políticas de grupo:
ejecutar -> gpedit.msc
y configurando la siguiente categoría:
Configuracion de Computadora ->
Configuración de Windows ->
Configuraciones de seguridad ->
Configuración avanzada de la política de auditoría ->
Políticas de auditoría del sistema: objeto de política de grupo local ->
Inicio / Cierre de sesión ->
Auditar otros eventos de inicio / cierre de sesión
(En el Explicar pestaña dice “… le permite auditar … Bloquear y desbloquear una estación de trabajo”.)
Crédito: https://stackoverflow.com/a/15904838/1216896
Crear disparadores
Desde allí, puede configurar activadores para los eventos 4800 (bloqueo) y 4801 (desbloqueo) de la siguiente manera:
El programador de tareas de Win10 tiene muchos errores, especialmente en la GUI. Ver: https://www.ctrl.blog/entry/idle-task-scheduler-powershell
Es posible que tenga suerte al volver a compilar la interfaz:
mofcomp c:WindowsSystem32wbemSchedProv.mof
Es posible que también desee crear la tarea a través de la interfaz COM en PowerShell. Prefiero usar una variable de cadena que contenga la definición XML. Puede exportar el XML de la tarea creada con GUI y limpiarlo / corregirlo. Luego:
$TaskService = new-object -ComObject('Schedule.Service')
$TaskService.connect()
$Task = $TaskService.NewTask($null)
$task.XmlText = $XMLstring
$null = $Global:TaskFolder.RegisterTaskDefinition('Lock Arch Workstation', $Task, 6, $null, $null, 3)
¡Buena suerte!
Puedes estimular nuestra publicación poniendo un comentario y dejando una puntuación te damos las gracias.