Condividi tramite


Stop-Job

Arresta un processo in background di PowerShell.

Sintassi

Stop-Job
    [-PassThru]
    [-Id] <Int32[]>
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Stop-Job
    [-Job] <Job[]>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Stop-Job
    [-PassThru]
    [-Name] <String[]>
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Stop-Job
    [-PassThru]
    [-InstanceId] <Guid[]>
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Stop-Job
    [-PassThru]
    [-State] <JobState>
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Stop-Job
    [-PassThru]
    [-Filter] <Hashtable>
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Descrizione

Il cmdlet Stop-Job arresta i processi in background di PowerShell in corso. È possibile usare questo cmdlet per arrestare tutti i processi o arrestare i processi selezionati in base al nome, all'ID, all'ID istanza o allo stato oppure passando un oggetto processo a Stop-Job.

È possibile usare Stop-Job per arrestare i processi in background, ad esempio quelli avviati usando il cmdlet Start-Job o il parametro AsJob di qualsiasi cmdlet. Quando si arresta un processo in background, PowerShell completa tutte le attività in sospeso nella coda del processo e quindi termina il processo. Dopo l'invio di questo comando non vengono aggiunte nuove attività alla coda.

Questo cmdlet non elimina i processi in background. Per eliminare un processo, usare il cmdlet Remove-Job.

A partire da Windows PowerShell 3.0, Stop-Job arresta anche i tipi di processi personalizzati, ad esempio processi del flusso di lavoro e istanze di processi pianificati. Per abilitare Stop-Job per arrestare un processo con tipo di processo personalizzato, importare il modulo che supporta il tipo di processo personalizzato nella sessione prima di eseguire un comando Stop-Job , usando il cmdlet Import-Module oppure usando o ottenendo un cmdlet nel modulo. Per informazioni su un tipo di processo personalizzato particolare, vedere la documentazione relativa alla funzionalità del tipo di processo personalizzato.

Esempio

Esempio 1: Arrestare un processo in un computer remoto usando Invoke-Command

$s = New-PSSession -ComputerName Server01 -Credential Domain01\Admin02
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
Invoke-Command -Session $s -ScriptBlock { Stop-job -Job $Using:j }

Questo esempio illustra come usare il cmdlet Stop-Job per arrestare un processo in esecuzione in un computer remoto.

Poiché il processo è stato avviato usando il cmdlet Invoke-Command per eseguire un comando Start-Job in modalità remota, l'oggetto processo viene archiviato nel computer remoto. Per eseguire un comando Stop-Job in remoto, è necessario usare un altro comando Invoke-Command . Per altre informazioni sui processi remoti in background, vedere about_Remote_Jobs.

Il primo comando crea una sessione di PowerShell (PSSession) nel computer Server01 e quindi archivia l'oggetto sessione nella variabile $s. Il comando usa le credenziali di un amministratore di dominio.

Il secondo comando usa il cmdlet Invoke-Command per eseguire un comando Start-Job nella sessione. Il comando nel processo ottiene tutti gli eventi nel registro eventi di sistema. L'oggetto processo risultante viene archiviato nella variabile $j.

Il terzo comando arresta il processo. Usa il cmdlet Invoke-Command per eseguire un comando Stop-Job in PSSession in Server01. Dato che gli oggetti processo sono archiviati in $j, che è una variabile nel computer locale, il comando usa il modificatore di ambito Using per identificare $j come variabile locale. Per altre informazioni sul modificatore using scope, vedere about_Remote_Variables.

Al termine del comando, il processo viene arrestato e la sessione PSSession in $s è disponibile per l'uso.

Esempio 2: Arrestare un processo in background

Stop-Job -Name "Job1"

Questo comando arresta il processo in background Job1.

Esempio 3: Arrestare diversi processi in background

Stop-Job -Id 1, 3, 4

Questo comando arresta tre processi. Sono identificati mediante i relativi ID.

Esempio 4: Arrestare tutti i processi in background

Get-Job | Stop-Job

Questo comando arresta tutti i processi in background nella sessione corrente.

Esempio 5: Arrestare tutti i processi in background bloccati

Stop-Job -State Blocked

Questo comando arresta tutti i processi bloccati.

Esempio 6: Arrestare un processo usando un ID istanza

Get-Job | Format-Table ID, Name, Command, @{Label="State";Expression={$_.JobStateInfo.State}},
InstanceID -Auto

Id Name Command                 State  InstanceId
-- ---- -------                 -----  ----------
1 Job1 start-service schedule Running 05abb67a-2932-4bd5-b331-c0254b8d9146
3 Job3 start-service schedule Running c03cbd45-19f3-4558-ba94-ebe41b68ad03
5 Job5 get-service s*         Blocked e3bbfed1-9c53-401a-a2c3-a8db34336adf

Stop-Job -InstanceId e3bbfed1-9c53-401a-a2c3-a8db34336adf

Questi comandi mostrano come arrestare un processo in base al relativo ID istanza.

Il primo comando usa il cmdlet Get-Job per ottenere i processi nella sessione corrente. Il comando usa un operatore pipeline (|) per inviare i processi a un comando Format-Table, che visualizza una tabella delle proprietà specificate di ogni processo. La tabella include l'ID istanza di ogni processo. Usa una proprietà calcolata per visualizzare lo stato del processo.

Il secondo comando usa un comando Stop-Job con il parametro InstanceID per arrestare un processo selezionato.

Esempio 7: Arrestare un processo in un computer remoto

$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog System} -AsJob
$j | Stop-Job -PassThru

Id    Name    State      HasMoreData     Location         Command
--    ----    ----       -----------     --------         -------
5     Job5    Stopped    True            user01-tablet    get-eventlog system

Questo esempio illustra come usare il cmdlet Stop-Job per arrestare un processo in esecuzione in un computer remoto.

Poiché il processo è stato avviato usando il parametro AsJob del cmdlet Invoke-Command , l'oggetto processo si trova nel computer locale, anche se il processo viene eseguito nel computer remoto. È quindi possibile usare un comando stop-job locale per arrestare il processo.

Il primo comando usa il cmdlet Invoke-Command per avviare un processo in background nel computer Server01. Il comando usa il parametro AsJob per eseguire il comando remoto come processo in background.

Questo comando restituisce un oggetto processo, che corrisponde allo stesso oggetto processo restituito dal cmdlet Start-Job . Il comando salva l'oggetto processo nella variabile $j.

Il secondo comando usa un operatore pipeline per inviare il processo nella variabile $j a Stop-Job. Il comando usa il parametro PassThru per indicare a Stop-Job di restituire un oggetto processo. La visualizzazione dell'oggetto processo conferma che lo stato del processo è Arrestato.

Per altre informazioni sui processi remoti in background, vedere about_Remote_Jobs.

Parametri

-Confirm

Richiede la conferma dell'utente prima di eseguire il cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Filter

Specifica una tabella hash di condizioni. Questo cmdlet arresta i processi che soddisfano tutte le condizioni. Immettere una tabella hash in cui le chiavi sono le proprietà del processo e i valori sono i valori di queste proprietà.

Questo parametro funziona solo su tipi di processo personalizzati, ad esempio i processi del flusso di lavoro e i processi pianificati. Non funziona su processi in background standard, ad esempio quelli creati usando il cmdlet Start-Job . Per informazioni sul supporto di questo parametro, vedere l'argomento della Guida relativo al tipo di processo.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Type:Hashtable
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Id

Specifica gli ID dei processi arrestati da questo cmdlet. Per impostazione predefinita, vengono considerati tutti i processi nella sessione corrente.

L'ID è un numero intero che identifica in modo univoco il processo nella sessione corrente. È più facile ricordare e digitare l'ID istanza, ma è univoco solo nella sessione corrente. È possibile digitare uno o più ID, separati da virgole. Per trovare l'ID di un processo, digitare Get-Job.

Type:Int32[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Specifica gli ID istanza dei processi arrestati da questo cmdlet. Il valore predefinito corrisponde a tutti i processi.

Un ID istanza è un GUID che identifica in modo univoco il processo nel computer. Per trovare l'ID istanza di un processo, usare Get-Job.

Type:Guid[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Specifica i processi arrestati da questo cmdlet. Immettere una variabile che contiene i processi o un comando che li ottiene. È anche possibile usare un operatore pipeline per inviare processi al cmdlet Stop-Job . Per impostazione predefinita, Stop-Job elimina tutti i processi avviati nella sessione corrente.

Type:Job[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Name

Specifica i nomi descrittivi dei processi arrestati da questo cmdlet. Immettere i nomi dei processi in un elenco delimitato da virgole o usare caratteri jolly (*) per immettere un modello di nome di processo. Per impostazione predefinita, Stop-Job arresta tutti i processi creati nella sessione corrente.

Poiché il nome descrittivo non è garantito che sia univoco, usare i parametri WhatIf e Confirm quando si arrestano i processi in base al nome.

Type:String[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-PassThru

Restituisce un oggetto che rappresenta l'elemento in uso. Per impostazione predefinita, il cmdlet non genera alcun output.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-State

Specifica uno stato del processo. Questo cmdlet arresta solo i processi nello stato specificato. I valori validi per questo parametro sono:

  • NotStarted
  • In esecuzione
  • Completato
  • Non riuscito
  • Arrestato
  • Bloccato
  • Suspended
  • Disconnesso
  • Suspending
  • Stopping

Per altre informazioni sugli stati dei processi, vedere Enumerazione JobState in MSDN Library.

Type:JobState
Accepted values:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Mostra l'esito in caso di esecuzione del cmdlet. Il cmdlet non viene eseguito.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

System.Management.Automation.RemotingJob

È possibile inviare tramite pipe un oggetto processo a questo cmdlet.

Output

None, System.Management.Automation.PSRemotingJob

Questo cmdlet restituisce un oggetto processo, se si specifica il parametro PassThru . In caso contrario, il cmdlet non genera alcun output.