about_Scheduled_Jobs_Advanced
Descrizione breve
Illustra argomenti avanzati sui processi pianificati, tra cui la struttura dei file sottostanti.
Descrizione lunga
Per altre informazioni sui cmdlet contenuti nel modulo PSScheduledJob , vedere PSScheduledJob.
Directory e file di processo pianificati
I processi pianificati di PowerShell sono entrambi processi di PowerShell e attività dell'Utilità di pianificazione. Ogni processo pianificato viene registrato nell'Utilità di pianificazione e salvato su disco in formato XML di serializzazione di Microsoft .NET Framework.
Quando si crea un processo pianificato, PowerShell crea una directory per il processo pianificato nella $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
directory nel computer locale. Il nome della directory corrisponde al nome del processo.
Di seguito è riportata una directory ScheduledJobs di esempio.
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
Ogni processo pianificato ha una propria directory. La directory contiene il file XML del processo pianificato e una sottodirectory 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
La directory Output per un processo pianificato contiene la cronologia di esecuzione. Ogni volta che un trigger di processo avvia un processo pianificato, PowerShell crea una directory denominata timestamp nella directory di output. La directory timestamp contiene i risultati del processo in un file Results.xml e lo stato del processo in un file Status.xml .
Il comando seguente mostra le directory della cronologia di esecuzione per il processo pianificato 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
È possibile aprire ed esaminare i file ScheduledJobDefinition.xml, Results.xml e Status.xml oppure usare il Select-XML
cmdlet per analizzare i file.
Avviso
Non modificare i file XML. Se un file XML contiene codice XML non valido, PowerShell elimina il processo pianificato e la relativa cronologia di esecuzione, inclusi i risultati del processo.
Avviare immediatamente un processo pianificato
È possibile avviare immediatamente un processo pianificato in uno dei due modi seguenti:
- Eseguire il
Start-Job
cmdlet per avviare qualsiasi processo pianificato. - Aggiungere il parametro RunNow al
Register-ScheduledJob
comando per avviare il processo non appena viene eseguito il comando.
I processi avviati tramite il Start-Job
cmdlet sono processi in background di PowerShell standard, non istanze del processo pianificato. Come tutti i processi in background, questi processi vengono avviati immediatamente, non sono soggetti a opzioni di processo o interessati dai trigger di processo. L'output del processo non viene salvato nella directory Output della directory dei processi pianificati.
Il comando seguente usa il parametro DefinitionName del Start-Job
cmdlet per avviare il processo pianificato ProcessJob.
Start-Job -DefinitionName ProcessJob
Per gestire il processo e ottenere i risultati del processo, usare i cmdlet del processo. Per altre informazioni sui cmdlet di processo, vedere about_Jobs.
Nota
Per usare i cmdlet Job nelle istanze di processi pianificati, è necessario importare il modulo PSScheduledJob nella sessione. Per importare il modulo PSScheduledJob , digitare Import-Module PSScheduledJob
o usare qualsiasi cmdlet di processo pianificato, ad esempio Get-ScheduledJob
.
Rinominare un processo pianificato
Per rinominare un processo pianificato, usare il parametro Name del Set-ScheduledJob
cmdlet . Quando si rinomina un processo pianificato, PowerShell modifica il nome del processo pianificato e la directory dei processi pianificati. Tuttavia, non modifica i nomi delle istanze del processo pianificato già in esecuzione.
Ottenere l'ora di inizio e di fine
Per ottenere le date e le ore di inizio e fine delle istanze del processo, utilizzare le proprietà PSBeginTime e PSEndTime dell'oggetto ScheduledJob che Get-Job
restituisce per i processi pianificati.
Nell'esempio seguente viene utilizzato il parametro Property del Format-Table
cmdlet per visualizzare le proprietà PSBeginTime e PSEndTime di ogni istanza del processo in una tabella. Una proprietà calcolata denominata Label visualizza il tempo trascorso di ogni istanza del processo.
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
Gestire la cronologia di esecuzione
È possibile determinare il numero di risultati dell'istanza del processo salvati per ogni processo pianificato ed eliminare la cronologia di esecuzione e i risultati dei processi salvati di qualsiasi processo pianificato.
La proprietà ExecutionHistoryLength di un processo pianificato determina il numero di risultati dell'istanza del processo salvati per il processo pianificato. Quando il numero di risultati salvati supera il valore della proprietà ExecutionHistoryLength , PowerShell elimina i risultati dell'istanza meno recente per fare spazio ai risultati dell'istanza più recente.
Per impostazione predefinita, PowerShell salva la cronologia di esecuzione e i risultati di 32 istanze di ogni processo pianificato. Per modificare tale valore, usare i parametri MaxResultCount dei Register-ScheduledJob
cmdlet o Set-ScheduledJob
.
Per eliminare la cronologia di esecuzione e tutti i risultati per un processo pianificato, usare il parametro ClearExecutionHistory del Set-ScheduledJob
cmdlet . L'eliminazione di questa cronologia di esecuzione non impedisce a PowerShell di salvare i risultati delle nuove istanze del processo pianificato.
Nell'esempio seguente viene usato lo splatting per creare $JobParms
i valori dei parametri passati al Register-ScheduledJob
cmdlet . Per altre informazioni, vedere about_Splatting.md.
Register-ScheduledJob
Usa @JobParms
per creare un processo pianificato. Il comando usa il parametro MaxResultCount con un valore pari a 12 per salvare solo i 12 risultati dell'istanza più recente del processo pianificato.
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
Il comando seguente usa il parametro MaxResultCount del Set-ScheduledJob
cmdlet per aumentare il numero di risultati dell'istanza salvata a 15.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
Il comando seguente elimina la cronologia di esecuzione e i risultati salvati correnti del processo pianificato processjob .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Il comando seguente ottiene i valori delle proprietà name e ExecutionHistoryLength di tutti i processi pianificati nel computer e li visualizza in una tabella.
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize