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