about_Scheduled_Jobs

Se aplica a: Windows PowerShell 3.0

TEMA

about_Scheduled_Jobs

DESCRIPCIÓN BREVE

Describe los trabajos programados y explica cómo usarlos y administrarlos en Windows PowerShell® y en el Programador de tareas.

DESCRIPCIÓN LARGA

Los trabajos programados de Windows PowerShell consisten en una mezcla muy práctica de trabajos en segundo plano de Windows PowerShell y tareas del Programador de tareas.

Como sucede con los trabajos en segundo plano de Windows PowerShell, los trabajos programados se ejecutan de forma asincrónica en segundo plano. Las instancias de los trabajos programados que se han ejecutado pueden administrarse mediante los cmdlets de trabajo, como Start-Job, Get-Job, Stop-Job y Receive-Job.

Al igual que las tareas del Programador de tareas, los trabajos programados se guardan en el disco. Puede ver y administrar los trabajos en el Programador de tareas, habilitarlos y deshabilitarlos según sea necesario, ejecutarlos o usarlos como plantillas, establecer programaciones únicas o recurrentes para iniciar los trabajos o establecer condiciones en las que iniciarlos.

Además, los resultados de las instancias de trabajos programados se guardan en el disco en un formato fácilmente accesible, lo que ofrece un registro de ejecución de los resultados de los trabajos. Los trabajos programados vienen con un conjunto personalizado de cmdlets para administrarlos. Los cmdlets permiten crear, editar, administrar, deshabilitar y volver a habilitar trabajos programados, desencadenadores de trabajos y opciones de trabajos.

Este conjunto de herramientas integral y flexible convierte los trabajos programados en un componente esencial de muchas soluciones de TI de Windows PowerShell profesionales.

Los cmdlets de trabajos programados se incluyen en el módulo PSScheduledJob que se instala con Windows PowerShell. Este módulo se introdujo en Windows PowerShell 3.0 y funciona en Windows PowerShell 3.0 y versiones posteriores de Windows PowerShell.

Para más información sobre los trabajos en segundo plano de Windows PowerShell, consulte About_Jobs (https://go.microsoft.com/fwlink/?LinkID=113251).

Para más información sobre el Programador de tareas, consulte "Programador de tareas" en la biblioteca de TechNet en https://go.microsoft.com/fwlink/?LinkId=232928.

NOTA: Puede ver y administrar los trabajos programados de Windows PowerShell en el Programador de tareas, pero los cmdlets de Scheduled Job y trabajos de Windows PowerShell solo funcionan con los trabajos programados que se crean en Windows PowerShell.

CMDLETS DE TRABAJOS PROGRAMADOS

El módulo PSScheduledJob contiene los siguientes cmdlets.

    Register-ScheduledJob:       Creates a scheduled job.
    Get-ScheduledJob:            Gets a scheduled job.
    Set-ScheduledJob:            Changes the properties of a scheduled job
    Disable-ScheduledJob:        Temporarily disables a scheduled job.
    Enable-ScheduledJob:         Re-enables a scheduled job.
    Unregister-ScheduledJob      Deletes a scheduled job and its saved results.

    New-JobTrigger:              Creates a job trigger.
    Get-JobTrigger:              Gets a job trigger.
    Add-JobTrigger:              Adds a job trigger to a scheduled job.
    Set-JobTrigger:              Changes a job trigger.
    Disable-JobTrigger:          Temporarily disables a job trigger.
    Enable-JobTrigger:           Re-enables a job trigger.
    Remove-JobTrigger:           Deletes a job trigger.

    New-ScheduledJobOption:      Creates a job options object.
    Get-ScheduledJobOption:      Gets the job options of a scheduled job.
    Set-ScheduledJobOption:      Changes the job options of a scheduled job.

INICIO RÁPIDO

Los comandos siguientes crean un trabajo programado que se inicia cada día a las 3:00 a. m. y ejecuta el cmdlet Get-Process. El trabajo se inicia incluso si el equipo funciona con batería.

        $trigger = New-JobTrigger -Daily -At 3AM

        $options = New-ScheduledJobOption -StartIfOnBattery

        Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
            -Trigger $trigger -ScheduledJobOption $options

El comando siguiente obtiene todos los trabajos programados en el equipo local.

        PS C:\> Get-ScheduledJob

        Id         Name            Triggers        Command            Enabled
        --         ----            --------        -------            -------
        7          ProcessJob      {1}             Get-Process        True

El comando siguiente obtiene los desencadenadores de trabajo de ProcessJob. Los parámetros de entrada especifican el trabajo programado, no el desencadenador, porque los desencadenadores se guardan en un trabajo programado.

        PS C:\> Get-JobTrigger -Name ProcessJob

        Id         Frequency       Time                   DaysOfWeek              Enabled
        --         ---------       ----                   ----------              -------
        1          Daily           11/5/2011 3:00:00 AM                           True

El siguiente comando utiliza el parámetro ContinueIfGoingOnBattery del cmdlet Set-ScheduledJob para cambiar la propiedad StopIfGoingOnBatteries de ProcessJob a False.

        PS C:\> Get-ScheduledJob -Name ProcessJob | Set-ScheduledJobOption `
               -ContinueIfGoingOnBattery -Passthru

        StartIfOnBatteries     : True
        StopIfGoingOnBatteries : False
        WakeToRun              : True
        StartIfNotIdle         : True
        StopIfGoingOffIdle     : False
        RestartOnIdleResume    : False
        IdleDuration           : 00:10:00
        IdleTimeout            : 01:00:00
        ShowInTaskScheduler    : True
        RunElevated            : False
        RunWithoutNetwork      : True
        DoNotAllowDemandStart  : False
        MultipleInstancePolicy : IgnoreNew
        JobDefinition          : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

El comando siguiente obtiene el trabajo programado de ProcessJob.

        PS C:\> Get-ScheduledJob ProcessJob

        Id         Name            Triggers        Command        Enabled
        --         ----            --------        -------        -------
        7          ProcessJob      {1}             Get-Process    True

El comando siguiente usa el cmdlet Get-Job para obtener todas las instancias del trabajo programado de ProcessJob que se han ejecutado hasta ahora. El cmdlet Get-Job obtiene los trabajos programados solo cuando se importa el módulo PSScheduledJob en la sesión actual.

SUGERENCIA: tenga en cuenta que usará los cmdlets de ScheduledJob para administrar los trabajos programados, pero utilizará los cmdlets de Job para administrar las instancias de los trabajos programados.

        PS C:\> Get-Job -Name ProcessJob

        Id     Name        PSJobTypeName  State    HasMoreData   Location   Command
        --     ----        ------------   -----    -----------   --------   -------
        45     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        46     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        47     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        48     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        49     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        50     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        51     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process

El comando siguiente obtiene los resultados de la instancia más reciente del trabajo programado de ProcessJob (ID = 51).

        Receive-Job -ID 51    

Aunque el comando Receive-Job no incluía el parámetro Keep, los resultados del trabajo se guardan en disco hasta que se eliminen o se supere el número máximo de resultados.

Los resultados del trabajo ya no están disponibles en esta sesión, pero si inicia una nueva sesión o abre una nueva ventana de Windows PowerShell, los resultados del trabajo volverán a estar disponibles.

El comando siguiente usa el parámetro DefinitionName del cmdlet Start-Job para iniciar el trabajo programado ProcessJob.

Los trabajos que se inician mediante el cmdlet Start-Job son trabajos en segundo plano estándar de Windows PowerShell, y no instancias de la tarea programada. Al igual que todos los trabajos en segundo plano, estos trabajos se inician inmediatamente (no dependen de las opciones de trabajo ni se ven afectados por los desencadenadores de trabajo) y la salida no se guarda en el directorio Output del directorio de trabajo programado.

         PS C:\>Start-Job -DefinitionName ProcessJob

El comando siguiente elimina el trabajo programado de ProcessJob y todos los resultados de sus instancias de trabajo.

        PS C:\> Remove-ScheduledJob ProcessJob

CONCEPTOS DE TRABAJOS PROGRAMADOS

Un "trabajo programado" ejecuta comandos o un script. Un trabajo programado puede incluir "desencadenadores de trabajo", después iniciar el trabajo y "opciones de trabajo" que establezcan condiciones para ejecutarlo.

Un "desencadenador de trabajo" inicia automáticamente un trabajo programado. Un desencadenador de trabajo puede incluir una programación puntual o periódica, o especificar un evento, como cuando un usuario inicia sesión o Windows se inicia. Un trabajo programado puede tener uno o varios desencadenadores de trabajo y puede crear, agregar, habilitar, deshabilitar y obtener desencadenadores de trabajo.

Los desencadenadores de trabajo son opcionales. También puede iniciar trabajos programados inmediatamente con el cmdlet Start-Job o agregando el parámetro RunNow al comando Register-ScheduledJob.

Las "opciones de trabajo" establecen las condiciones para ejecutar un trabajo programado. Cada trabajo programado tiene un objeto de opciones de trabajo. Puede crear y editar objetos de opciones de trabajo y agregarlos a uno o varios trabajos programados.

Cada vez que se inicia un trabajo programado, se crea una "instancia de trabajo". Utilice los cmdlets Job de Windows PowerShell para ver y administrar la instancia del trabajo.

Los trabajos programados se guardan en el disco (de ahí que el verbo del cmdlet sea Register, en lugar de New) en archivos XML en el directorio $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs del equipo local.

Windows PowerShell crea un directorio para cada trabajo programado y guarda los comandos de trabajo, los desencadenadores de trabajo, las opciones de trabajo y los resultados del trabajo en el directorio de trabajo programado. Los desencadenadores de trabajo y las opciones de trabajo no se guardan por separado en el disco. Se guardan en el XML de trabajo programado de cada trabajo programado con el que están asociados.

Los trabajos programados, los desencadenadores de trabajo y las opciones de trabajo aparecen en Windows PowerShell como objetos. Los objetos se entrelazan, lo que hace que sea fácil detectarlos y usarlos en scripts y comandos.

Los trabajos programados aparecen como objetos ScheduledJobDefinition. El objeto ScheduledJobDefinition tiene una propiedad JobTriggers que contiene los desencadenadores de trabajo del trabajo programado y una propiedad Options que contiene las opciones del trabajo. Los objetos ScheduledJobTriggers y ScheduledJobOptions que representan, respectivamente, desencadenadores de trabajo y opciones de trabajo, tienen cada uno una propiedad JobDefinition que contiene el trabajo programado con el que están asociados. Esta interconexión recursiva hace que sea más fácil encontrar los desencadenadores y las opciones de un trabajo programado y buscar, hacer un script y mostrar el trabajo programado con el que están asociados un desencadenador de trabajo o una opción de trabajo.

VEA TAMBIÉN

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

about_jobs

Programador de tareas (https://go.microsoft.com/fwlink/?LinkId=232928)

Add-JobTrigger

Disable-JobTrigger

Disable-ScheduledJob

Enable-JobTrigger

Enable-ScheduledJob

Get-Job

Get-JobTrigger

Get-ScheduledJob

Get-ScheduledJobOption

New-JobTrigger

New-ScheduledJobOption

Receive-Job

Register-ScheduledJob

Remove-JobTrigger

Set-JobTrigger

Set-ScheduledJob

Set-ScheduledJobOption

Start-Job

Unregister-ScheduledJob