web-dev-qa-db-ja.com

Powershellを使用してschtasksをクエリする

Windows7マシンで、schtasks.exeを使用してすべてのスケジュールされたタスクを表示するクエリを実行できます。

これは問題ありませんが、次のようなものを使用して結果セットをフィルタリングしたいと思います

schtasks /query | where { $_.TaskName -eq "myTask" } 

問題は、このschtasksがwhere関数が機能するための適切にフォーマットされたリストを返さないことです。

私も試しました:

schtasks /query /FO LIST
schtasks /query | format-list | where ....

それらも機能しません。

Win7を使用してローカルコンピューター上のschtasksをクエリし、それらをフィルター処理するための最良の方法は何でしょうか

8
jdiaz

Schtasksを使用すると、テキストを解析できます。これはほとんど常にエラーが発生しやすく、コマンドの出力を取得するよりも間違いなく困難です。

PowerShellPack にTaskSchedulerモジュールが存在します。 PowerShellパックをインストールしたら、スケジュールされたすべてのタスクを取得するには、次を使用します。

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

これらは実際のオブジェクトなので、特定の名前のタスクを見つけるには、次のコマンドを使用できます。

Get-ScheduledTask -Recurse |  Where-Object { $_.Name -like "*Task*"}

一般に、PowerShellコミュニティでは、schtasksなどのコマンドラインを使用するのが非常に難しく、Get-ScheduledTaskなどの使いやすいコマンドレットに変換されています。

関連項目:

TaskSchedulerモジュールを使用した自動メールの送信

お役に立てれば

8

あなたは試すことができます:

schtasks /query /FO CSV | ConvertFrom-CSV | Where { $_.TaskName -eq "myTask" } 

コツは、まず出力をCSVに変換し、次にPowerShellオブジェクトに戻すことです。

2
Alex

これはブログ投稿です 私はこれを行うことについて書きました。基本的に、/ FO LIST/Vの出力を取得してファイルに書き込み、import-csvを使用してオブジェクトとしてインポートし直しました

2
Mike Shepard

あなたがpowershellでそれをする必要がない場合は、次のように動作します

schtasks/query | findstr/i "mytask"

pSバージョン
schtasks/query | ?{$ _ -like 'mytask'}

2
tony roth

あなたはそれを考えすぎています。

必要なもののコマンドラインschtasks/query/s%computername%| FIND/I "%name_of_task%"

例schtasks/query/s server01 | FIND/I "schedule"

0
Chris Gould