Condividi tramite


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 P edizione Standard ndTime 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 P edizione Standard ndTime 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

Vedi anche