Compartir a través de


Acerca de los trabajos programados avanzados

Descripción breve

Explica los temas avanzados sobre los trabajos programados, incluida la estructura de archivos subyacente a los trabajos programados.

Descripción larga

Directorios y archivos de trabajos programados

Los trabajos programados de PowerShell son trabajos de PowerShell y tareas del Programador de tareas. Cada trabajo programado se registra en el Programador de tareas y se guarda en el disco en formato XML de serialización de Microsoft .NET Framework.

Al crear un trabajo programado, PowerShell crea un directorio para el trabajo programado en el $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs directorio del equipo local. El nombre del directorio es el mismo que el nombre del trabajo.

A continuación se muestra un directorio ScheduledJobs de ejemplo.

Get-ChildItem $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Directory: C:\Users\User01\AppData\Local
               \Microsoft\Windows\PowerShell\ScheduledJobs

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         9/29/2011  10:03 AM            ArchiveProjects
d----         9/30/2011   1:18 PM            Inventory
d----        10/20/2011   9:15 AM            Backup-Scripts
d----         11/7/2011  10:40 AM            ProcessJob
d----         11/2/2011  10:25 AM            SecureJob
d----         9/27/2011   1:29 PM            Test-HelpFiles
d----         9/26/2011   4:22 PM            DeployPackage

Cada trabajo programado tiene su propio directorio. El directorio contiene el archivo XML del trabajo programado y un subdirectorio Output .

$Path = "$home\AppData\Local\Microsoft\Windows\PowerShell"
$Path += "\ScheduledJobs\ProcessJob"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/1/2011   3:00 PM            Output
-a---         11/1/2011   3:43 PM       7281 ScheduledJobDefinition.xml

El directorio Output de un trabajo programado contiene su historial de ejecución. Cada vez que un desencadenador de trabajo inicia un trabajo programado, PowerShell crea un directorio con nombre de marca de tiempo en el directorio de salida. El directorio timestamp contiene los resultados del trabajo en un archivo Results.xml y el estado del trabajo en un archivo Status.xml .

El siguiente comando muestra los directorios del historial de ejecución para el trabajo programado ProcessJob .

$Path = "$home\AppData\Local\Microsoft"
$Path += "\Windows\PowerShell\ScheduledJobs\ProcessJob\Output"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft
               \Windows\PowerShell\ScheduledJobs\ProcessJob\Output

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/2/2011   3:00 AM            20111102-030002-260
d----         11/3/2011   3:00 AM            20111103-030002-277
d----         11/4/2011   3:00 AM            20111104-030002-209
d----         11/5/2011   3:00 AM            20111105-030002-251
d----         11/6/2011   3:00 AM            20111106-030002-174
d----         11/7/2011  12:00 AM            20111107-000001-914
d----         11/7/2011   3:00 AM            20111107-030002-376
$Path = "$home\AppData\Local\Microsoft\Windows\PowerShell\"
$Path += "ScheduledJobs\ProcessJob\Output\20111102-030002-260"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob\Output\20111102-030002-260

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         11/2/2011   3:00 AM     581106 Results.xml
-a---         11/2/2011   3:00 AM       9451 Status.xml

Puede abrir y examinar los archivos deScheduledJobDefinition.xml, Results.xml y Status.xml o usar el Select-XML cmdlet para analizar los archivos.

Advertencia

No edite los archivos XML. Si algún archivo XML contiene XML no válido, PowerShell elimina el trabajo programado y su historial de ejecución, incluidos los resultados del trabajo.

Iniciar un trabajo programado inmediatamente

Puede iniciar un trabajo programado inmediatamente de dos maneras:

  • Ejecute el Start-Job cmdlet para iniciar cualquier trabajo programado.
  • Agregue el parámetro RunNow al Register-ScheduledJob comando para iniciar el trabajo en cuanto se ejecute el comando.

Los trabajos que se inician mediante el Start-Job cmdlet son trabajos en segundo plano de PowerShell estándar, no instancias del trabajo programado. Al igual que todos los trabajos en segundo plano, estos trabajos se inician inmediatamente, no están sujetos a opciones de trabajo ni se ven afectadas por desencadenadores de trabajos. La salida del trabajo no se guarda en el directorio Salida del directorio de trabajo programado.

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

Start-Job -DefinitionName ProcessJob

Para administrar el trabajo y obtener los resultados del trabajo, use los cmdlets de trabajo. Para obtener más información sobre los cmdlets de trabajo, consulte about_Jobs.

Nota

Para usar los cmdlets job en instancias de trabajos programados, el módulo PSScheduledJob debe importarse en la sesión. Para importar el módulo PSScheduledJob , escriba Import-Module PSScheduledJob o use cualquier cmdlet de trabajo programado, como Get-ScheduledJob.

Cambiar el nombre de un trabajo programado

Para cambiar el nombre de un trabajo programado, use el parámetro Name del Set-ScheduledJob cmdlet . Al cambiar el nombre de un trabajo programado, PowerShell cambia el nombre del trabajo programado y el directorio de trabajos programados. Sin embargo, no cambia los nombres de las instancias del trabajo programado que ya se han ejecutado.

Obtener horas de inicio y finalización

Para obtener las fechas y horas en que se iniciaron y finalizaron las instancias de trabajo, use las propiedades PSBeginTime y PSEndTime del objeto ScheduledJob que Get-Job devuelve para los trabajos programados.

En el ejemplo siguiente se usa el parámetro Property del Format-Table cmdlet para mostrar las propiedades PSBeginTime y PSEndTime de cada instancia de trabajo de una tabla. Una propiedad calculada denominada Label muestra el tiempo transcurrido de cada instancia de trabajo.

Get-job -Name UpdateHelpJob |
  Format-Table -Property ID, PSBeginTime, PSEndTime,
@{Label="Elapsed Time";Expression={$.PsEndTime - $.PSBeginTime}}
Id   PSBeginTime             PSEndTime                Elapsed Time
--   -----------             ---------                ------------
 2   11/3/2011 3:00:01 AM    11/3/2011 3:00:39 AM     00:00:38.0053854
 3   11/4/2011 3:00:02 AM    11/4/2011 3:01:01 AM     00:00:59.1188475
 4   11/5/2011 3:00:02 AM    11/5/2011 3:00:50 AM     00:00:48.3692034
 5   11/6/2011 3:00:01 AM    11/6/2011 3:00:54 AM     00:00:52.8013036
 6   11/7/2011 3:00:01 AM    11/7/2011 3:00:38 AM     00:00:37.1930350
 7   11/8/2011 3:00:01 AM    11/8/2011 3:00:57 AM     00:00:56.2570556
 8   11/9/2011 3:00:03 AM    11/9/2011 3:00:55 AM     00:00:51.8142222
 9   11/10/2011 3:00:02 AM   11/10/2011 3:00:42 AM    00:00:40.7195954

Administración del historial de ejecución

Puede determinar el número de resultados de la instancia de trabajo que se guardan para cada trabajo programado y eliminar el historial de ejecución y los resultados del trabajo guardado de cualquier trabajo programado.

La propiedad ExecutionHistoryLength de un trabajo programado determina cuántos resultados de la instancia de trabajo se guardan para el trabajo programado. Cuando el número de resultados guardados supera el valor de la propiedad ExecutionHistoryLength , PowerShell elimina los resultados de la instancia más antigua para dejar espacio para los resultados de la instancia más reciente.

De forma predeterminada, PowerShell guarda el historial de ejecución y los resultados de 32 instancias de cada trabajo programado. Para cambiar ese valor, use los parámetros MaxResultCount de los Register-ScheduledJob cmdlets o Set-ScheduledJob .

Para eliminar el historial de ejecución y todos los resultados de un trabajo programado, use el parámetro ClearExecutionHistory del Set-ScheduledJob cmdlet . La eliminación de este historial de ejecución no impide que PowerShell guarde los resultados de las nuevas instancias del trabajo programado.

En el ejemplo siguiente se usa la expansión para crear $JobParms que son valores de parámetro que se pasan al Register-ScheduledJob cmdlet . Para obtener más información, vea about_Splatting.md. Register-ScheduledJob usa @JobParms para crear un trabajo programado. El comando usa el parámetro MaxResultCount con un valor de 12 para guardar solo los 12 resultados de la instancia de trabajo más reciente del trabajo programado.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Process}
  MaxResultCount = "12"
}

Register-ScheduledJob @JobParms

El siguiente comando usa el parámetro MaxResultCount del Set-ScheduledJob cmdlet para aumentar el número de resultados de la instancia guardada a 15.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15

El siguiente comando elimina el historial de ejecución y los resultados guardados actuales del trabajo programado ProcessJob .

Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory

El siguiente comando obtiene los valores de las propiedades name y ExecutionHistoryLength de todos los trabajos programados del equipo y los muestra en una tabla.

Get-ScheduledJob |
  Format-Table -Property Name, ExecutionHistoryLength -AutoSize

Consulte también

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobs

about_Splatting.md

Programador de tareas