次の方法で共有


Stop-Job

PowerShell バックグラウンド ジョブを停止します。

構文

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>]

説明

Stop-Job コマンドレットは、進行中の PowerShell バックグラウンド ジョブを停止します。 このコマンドレットを使用すると、名前、ID、インスタンス ID、または状態に基づいて、またはジョブ オブジェクトを Stop-Job に渡すことによって、すべてのジョブを停止したり、選択したジョブを停止したりできます。

Stop-Job を使用すると、Start-Job コマンドレットまたは任意のコマンドレットの AsJob パラメーターを使用して開始されたジョブなど、バックグラウンド ジョブを停止できます。 バックグラウンド ジョブを停止すると、PowerShell はそのジョブ キューで保留中のすべてのタスクを完了し、ジョブを終了します。 このコマンドが送信された後、新しいタスクはキューに追加されません。

このコマンドレットは、バックグラウンド ジョブを削除しません。 ジョブを削除するには、Remove-Job コマンドレットを使用します。

Windows PowerShell 3.0 以降、Stop-Job は、ワークフロー ジョブやスケジュールされたジョブのインスタンスなどのカスタム ジョブの種類も停止します。 Stop-Job でカスタム ジョブの種類のジョブを停止できるようにするには、stop-Job コマンドを実行する前に、Import-Module コマンドレットを使用するか、モジュールで コマンドレットを使用または取得して、カスタム ジョブの種類をサポートするモジュールをセッションにインポートします。 特定のカスタム ジョブの種類については、カスタムのジョブの種類機能のドキュメントを参照してください。

例 1: 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 }

この例は、Stop-Job コマンドレットを使用して、リモート コンピューターで実行中のジョブを停止する方法を示しています。

ジョブは Invoke-Command コマンドレットを使用して開始され、 Start-Job コマンドをリモートで実行したため、ジョブ オブジェクトはリモート コンピューターに格納されます。 Stop-Job コマンドをリモートで実行するには、別の Invoke-Command コマンドを使用する必要があります。 リモート バックグラウンド ジョブの詳細については、「about_Remote_Jobs」を参照してください。

最初のコマンドは、Server01 コンピューターに PowerShell セッション (PSSession) を作成し、セッション オブジェクトを $s 変数に格納します。 このコマンドは、ドメイン管理者の資格情報を使用します。

2 番目のコマンドは、Invoke-Command コマンドレットを使用して、セッションで Start-Job コマンドを実行します。 ジョブのコマンドは、システム イベント ログ内のすべてのイベントを取得します。 結果のジョブ オブジェクトは、$j 変数に格納されます。

3 番目のコマンドは、ジョブを停止します。 Invoke-Command コマンドレットを使用して、Server01 の PSSessionStop-Job コマンドを実行します。 これは、ジョブ オブジェクトがローカル コンピューター上の変数である $j に格納されているためです。コマンドは、$j をローカル変数として識別するために、Using スコープ修飾子を使用します。 Using scope 修飾子の詳細については、「 about_Remote_Variables」を参照してください。

コマンドが完了すると、ジョブが停止し、$sの PSSession を使用できるようになります。

例 2: バックグラウンド ジョブを停止する

Stop-Job -Name "Job1"

このコマンドは、Job1 バックグラウンド ジョブを停止します。

例 3: 複数のバックグラウンド ジョブを停止する

Stop-Job -Id 1, 3, 4

このコマンドは、3 つのジョブを停止します。 ID によって識別しています。

例 4: すべてのバックグラウンド ジョブを停止する

Get-Job | Stop-Job

このコマンドは、現在のセッションのすべてのバックグラウンド ジョブを停止します。

例 5: ブロックされているすべてのバックグラウンド ジョブを停止する

Stop-Job -State Blocked

このコマンドは、すべてのブロックされているジョブを停止します。

例 6: インスタンス ID を使用してジョブを停止する

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

これらのコマンドは、インスタンス ID に基づいてジョブを停止する方法を示しています。

最初のコマンドでは、Get-Job コマンドレットを使用して、現在のセッションのジョブを取得します。 コマンドはパイプライン演算子 (|) を使用してジョブを Format-Table コマンドに送信し、各ジョブの指定したプロパティのテーブルを表示します。 この表には各ジョブのインスタンス ID が含まれます。 ジョブの状態を表示するには、集計プロパティを使用します。

2 番目のコマンドでは、InstanceID パラメーターを持つ Stop-Job コマンドを使用して、選択したジョブを停止します。

例 7: リモート コンピューターでジョブを停止する

$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

この例は、Stop-Job コマンドレットを使用して、リモート コンピューターで実行中のジョブを停止する方法を示しています。

ジョブは Invoke-Command コマンドレットの AsJob パラメーターを使用して開始されたので、ジョブはリモート コンピューターで実行されていても、ローカル コンピューター上にあります。 そのため、ローカルの Stop-Job コマンドを使用してジョブを停止できます。

最初のコマンドは、Invoke-Command コマンドレットを使用して、Server01 コンピューターでバックグラウンド ジョブを開始します。 このコマンドは、AsJob パラメーターを使用して、バックグラウンド ジョブとしてリモート コマンドを実行します。

このコマンドは、 Start-Job コマンドレットが返すジョブ オブジェクトと同じジョブ オブジェクトを返します。 このコマンドは、ジョブ オブジェクトを $j 変数に格納します。

2 番目のコマンドは、パイプライン演算子を使用して $j 変数のジョブを Stop-Job に渡します。 このコマンドは、PassThru パラメーターを使用して、Stop-Job に対してジョブ オブジェクトを返すように指示します。 ジョブ オブジェクトの表示では、ジョブの状態が [停止] であることを確認します。

リモート バックグラウンド ジョブの詳細については、「about_Remote_Jobs」を参照してください。

パラメーター

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

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

-Filter

条件のハッシュ テーブルを指定します。 このコマンドレットは、すべての条件を満たすジョブを停止します。 ジョブのプロパティをキー、ジョブのプロパティ値を値とするハッシュ テーブルを入力します。

このパラメーターは、ワークフロー ジョブ、スケジュールされたジョブなどの、カスタムのジョブの種類に対してのみ機能します。 Start-Job コマンドレットを使用して作成されたジョブなど、標準のバックグラウンド ジョブでは機能しません。 このパラメーターのサポートについては、ジョブの種類のヘルプ トピックを参照してください。

このパラメーターは Windows PowerShell 3.0 で導入されました。

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

-Id

このコマンドレットが停止するジョブの ID を指定します。 既定は、現在のセッション内のすべてのジョブです。

ID は、現在のセッションのジョブを一意に識別する整数です。 インスタンス ID よりも覚えて入力する方が簡単ですが、現在のセッションでのみ一意です。 1 つ以上の ID をコンマで区切って入力できます。 ジョブの ID を検索するには、「」と入力します Get-Job

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

-InstanceId

このコマンドレットが停止するジョブのインスタンス ID を指定します。 既定値はすべてのジョブです。

インスタンス ID は、コンピューター上のジョブを一意に識別する GUID です。 ジョブのインスタンス ID を調べるには、Get-Job を使用します。

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

-Job

このコマンドレットが停止するジョブを指定します。 ジョブが格納されている変数、またはジョブを取得するコマンドを入力します。 パイプライン 演算子を使用して 、Stop-Job コマンドレットにジョブを送信することもできます。 既定では、 Stop-Job は現在のセッションで開始されたすべてのジョブを削除します。

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

-Name

このコマンドレットが停止するジョブのフレンドリ名を指定します。 コンマ区切りの一覧でジョブの名前を入力するか、ワイルドカード文字 (*) を使用してジョブの名前パターンを入力します。 既定では、 Stop-Job は現在の セッションで作成されたすべてのジョブを停止します。

フレンドリ名は一意であることが保証されないため、名前でジョブを停止するときに WhatIf パラメーターと Confirm パラメーターを使用します。

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

-PassThru

作業中の項目を表すオブジェクトを返します。 既定では、このコマンドレットによる出力はありません。

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

-State

ジョブの状態を指定します。 このコマンドレットは、指定された状態のジョブのみを停止します。 このパラメーターの有効値は、次のとおりです。

  • NotStarted
  • 実行中
  • 完了
  • 失敗
  • 停止済み
  • Blocked
  • Suspended
  • [Disconnected](切断済み)
  • 中断中
  • 停止中

ジョブの状態の詳細については、MSDN ライブラリの JobState 列挙 に関するページを参照してください。

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

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

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

入力

System.Management.Automation.RemotingJob

ジョブ オブジェクトをこのコマンドレットにパイプできます。

出力

None, System.Management.Automation.PSRemotingJob

PassThru パラメーターを指定すると、このコマンドレットはジョブ オブジェクトを返します。 それ以外の場合、このコマンドレットによる出力はありません。