web-dev-qa-db-ja.com

schtasksを使用して、スケジュールされたタスクのステータスを取得するにはどうすればよいですか?

これを実行すると:

schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

私はこれを手に入れます:

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                N/A                    Disabled

ステータスのみを取得する方法はありますか?

3
Oskar K.

本当に使用する必要がない限り、schtasks.exe、PowerShellとその優れた出力およびフォーマットオプションをすべて使用します。

Get-ScheduledTask | ? TaskName -eq GoogleUpdateTaskMachineUA | Select State | ft -AutoSize

または

(Get-ScheduledTask | Where TaskName -eq GoogleUpdateTaskMachineUA ).State
4
Peter Hahndorf

ステータスのみを取得する方法はありますか?

次のコマンドを使用します。

for /f "usebackq skip=3 tokens=4" %a in (`schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"`) do @echo %a

ノート:

  • skip=3-ヘッダー行を無視します
  • tokens=4-4番目のトークン(ステータス列の値)を取得します
  • バッチファイルで使用するには、%a%%aに置き換えます

使用例:

F:\test>schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                03/02/2016 12:17:00    Ready

F:\test>for /f "usebackq skip=3 tokens=4" %a in (`schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"`) do @echo %a
Ready

参考文献

  • Windows CMDコマンドラインのA-Zインデックス -Windows cmdラインに関連するすべてのものの優れたリファレンス。
  • for/f -別のコマンドの結果に対してコマンドをループします。
  • schtasks -スケジュールされたジョブ/タスクを作成/編集します。ジョブは、ローカルコンピューターまたはリモートコンピューターで作成できます。
3
DavidPostill

詳細な出力にはschtasks /queryオプションを、リスト形式には/vを使用して/fo listを試してください。次に、findコマンドで結果をフィルタリングします。

schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list | find "Status:"

あなたはこのような文字列を取得します

Status:         Running

ステータスの値を抽出するには、forコマンドを使用します。

for /f "delims=: tokens=2" %a in ('schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list ^| find "Status:"') do @echo %a
  • バッチファイルで使用するには、%a%%aに置き換えます。
  • forコマンドで|>などの記号をエスケープするには、^を使用します
2
PrBr Costa

Windows 7を使用してPowershellスクリプトを作成していて、_Get-ScheduledTask_を使用できない場合は、次の使用を検討できます。

$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]

次のようになります。

_### Running this:
schtasks /query /S 'yourServer' /TN yourTask
### Leads to the output below.

Folder: \
TaskName                                 Next Run Time          Status         
======================================== ====================== ===============
yourTask                                 N/A                    Running   

### Running this:
$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]
Write-Host "$($status)"
### Leads to the output below

Running
_
0
StephenSolace

私はこれに対する良い答えを探しました、そして、私を親しくするいくつかのことがわかりました。結局、次のようになります。

$taskName="SomeTask"
$serverName="yourserver"
$status = (schtasks.exe /query /tn "$taskName" /s $serverName /v /fo CSV | ConvertFrom-Csv | Select-Object -Property "Status").Status

タスクのすべてのアイテムが必要な場合は、次のようなことができます...

$task= schtasks.exe /query /tn "$taskName" /s $serverName  /v /fo CSV | ConvertFrom-Csv | Select-Object

次に、操作するプロパティを選択できます...

$task.Status
$task."Last Result"

スペースを含むプロパティは引用符で囲んでください。

明確にするために、Get-ScheduledTaskが利用できない場合、私の応答はPowershellを使用しています。これは、Windows 7またはWindows Server 2008を実行している場合はそうではありません。1つの答えはステータスを取得する方法を提供しますが、このメソッドは理解しやすく、使いやすい。さらに、誰かが予定されているタスクの他のプロパティを取得することに興味がある場合、そのプロパティがどの列にあるかを解析する必要はありません。要するに、私の答えは[〜#〜] i [〜 #〜]が探していたので、他の気のある人たちと共有したいと思いました。

0

次の例は、名前にスペースが含まれているタスク名でも機能します。

for /f "tokens=3 delims=," %a in ('schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" /fo csv /nh') do echo %~a

Csv(c omma s eparated v alues)(/format csv)およびdelims=,、スペースは関係ありません。 /nhは "n o h eader"を表すので、skip=

0
Stephan