script - task scheduler windows 10 powershell
Ejecutar una secuencia de comandos powershell en el fondo una vez por minuto (8)
Quiero que se ejecute una secuencia de comandos powershell una vez por minuto en segundo plano. No puede aparecer ninguna ventana. ¿Cómo lo hago?
¡Estas respuestas son histéricas! Si desea ejecutar un script de powershell como un trabajo en segundo plano, intente start-job. / Script desde la CLI dentro de la carpeta en la que se encuentran los scripts.
En la pestaña [General] en las propiedades del Programador de tareas para la tarea, seleccionar el botón de opción "Ejecutar si el usuario ha iniciado sesión o no" impide que la ventana aparezca en mi máquina con Windows 7.
Para crear una tarea de powershell en segundo plano para ejecutar un script que se repite cada minuto sin ninguna ventana visible, ejecute powershell como administrador y luego use el cmdlet Register-ScheduledJob
para ejecutar su script. Aquí hay un ejemplo de cómo hacer que eso suceda:
Register-ScheduledJob -Name ''SomeJobName'' -FilePath ''path/to/your/ps1'' -Trigger (New-JobTrigger -Once -At "9/28/2018 0am" -RepetitionInterval (New-TimeSpan -Hour 1) -RepetitionDuration ([TimeSpan]::MaxValue))
Si desea forzar manualmente la ejecución de este trabajo (quizás para solucionar problemas), puede usar el cmdlet Get-ScheduledJob
siguiente manera:
(Get-ScheduledJob -Name ''SomeJobName'').StartJob()
Programe su tarea para que se ejecute como sistema. El siguiente comando programará una secuencia de comandos para que se ejecute en segundo plano sin mostrar la ventana de la consola de powershell:
schtasks /create /tn myTask /tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1" /sc minute /mo 1 /ru System
/ru
interruptor /ru
permite cambiar el contexto del usuario en el que se ejecutará la tarea programada.
Quizás este escenario sirva. No iniciamos el ejecutable de PowerShell cada minuto (esto es caro, por cierto). En su lugar, lo iniciamos una vez llamando a un script adicional que llama al script de trabajo una vez por minuto (o en realidad espera un minuto después de que el script de trabajador se cierre o falle).
Crea el inicio Invoke-MyScript.ps1:
for(;;) {
try {
# invoke the worker script
C:/ROM/_110106_022745/MyScript.ps1
}
catch {
# do something with $_, log it, more likely
}
# wait for a minute
Start-Sleep 60
}
Ejecute esto desde Cmd (por ejemplo, desde un archivo .bat de inicio):
start /min powershell -WindowStyle Hidden -Command C:/ROM/_110106_022745/Invoke-MyScript.ps1
La ventana de PowerShell aparece por un momento, pero se minimiza debido a start /min
y en un momento se oculta para siempre. De modo que, de hecho, solo aparece el icono de la barra de tareas por un momento, no la ventana en sí. No es tan malo.
Si desea ejecutar el script automáticamente en el intervalo de tiempo. (para windows os)
1) Open Schedule tasks from control panel.
2) Select Task Scheduler Library from left side window.
3) select Create Task from right side window.
4) Enter Name in General tab (any name).
5) Open Triggers tab -> New
6) Select interval as needed.Use Advanced settings for repeat task.
7) Open Actions tab ->New
8) Copy/Paste following line in Program/script *
* Here D:/B.ps1 in code is path to my B.ps1 file
C: / Windows / system32 / WindowsPowerShell / v1.0 / powershell.exe D: / B.ps1
9) ok and apply changes
10) Done!
Use el Programador de tareas de Windows y ejecute su script de esta forma:
powershell -File myScript.ps1 -WindowStyle Hidden
Además, cree el script que se ejecuta con una cuenta de usuario específica y no solo cuando ese usuario inicia sesión . De lo contrario, verá una ventana de consola.
# Filecheck.ps1
# Version 1.0
# Use this to simply test for the existance of an input file... Servers.txt.
# I want to then call another script if the input file exists where the
# servers.txt is neded to the other script.
#
$workpath="./Server1/Restart_Test"
# Created a functon that I could call as part of a loop.
function Filecheck
{
if (test-path $workpath/servers.txt)
{
rename-item $workpath/servers.txt servers1.txt
"Servers.txt exist... invoking an instance of your script agains the list of servers"
Invoke-Expression ./your_Script.ps1
}
Else
{
"sleeping"
Start-Sleep -Seconds 60
}
}
Do
{
Filecheck
$fred=0
# Needed to set a variabe that I could check in the while loop.
# Probably a better way but this was my way.
}
While( $fred -lt 1 )