SCHTASKS / Queryにクエリ結果に "multiple actions"属性を表示させる方法は?


2

特定のタスクに関する詳細をすべて表示したい。

例えば、私は複数のプログラムを実行する "MyTask"を持っています。 行動 、 下に示された: enter image description here

タスクスケジューラのコマンドラインバージョンでタスクが実行するプログラムのリストを見たいのですが Schtasks

だから私が実行すると:

SCHTASKS /Query /TN "\Microsoft\Windows\MyTask" /FO list /v

しかし、私は以下のように実行されるべき実際のアクション/プログラムの代わりにフレーズ「複数のアクション」を得るだけです: enter image description here

私は私が使用できることを知っています /XML 実行するプログラムのリストを表示するための引数ですが、結果を生成するためのタスクがたくさんある場合はどうしますか?出力をリストにしたい /FO list

どうやってこれを解決できますか?

回答:


2

バッチスクリプトリストすべてのタスクスケジューラのジョブ名とコマンド

以下から実行するバッチスクリプトを用意しました。 Windows 7 そして ウィンドウズ10

基本的にこれはなります:

  1. 実行する Schtasks とともに /XML すべてのスイッチとパイプ XML それを通して読む内容 findstr コマンド I それをフィルタリング(大文字と小文字を区別しない)して、その行だけをリダイレクトします。   含む <!-- そして <command> フラットファイルへの出力としての文字列。
  2. フラットファイルの内容は、その後動的に実行されます パワーシェル を置き換えるスクリプト XML より適切なタグ   フォーマットされたフィールド名。すべての行から先頭の空白を取り除きます。   空白行をすべて削除し、最後に各行の前に新しい行を1行挿入します。 Task Name フィールドは必要ありませんので最初の行をスキップします   その前に1行、つまりファイルの一番上の行があります。

注意: を参照してください ガッチャ 潜在的な異常の詳細と注意すべき項目については、以下のセクションを参照してください。


バッチスクリプト

@ECHO ON

SET RptFile=%temp%\TaskSchedReport.txt

:: -- This routine sets temp files
SET RptFileTmp=%temp%\~tmpTaskSchedReport.txt
IF EXIST "%RptFileTmp%" DEL /Q /F "%RptFileTmp%"
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

:SchTask
schtasks /query /XML | Findstr /I "<!-- <command>">"%RptFileTmp%"

:PowerShell
ECHO $origFile = "%RptFileTmp%"                                                    >> "%TmpPSScript%"
ECHO $NewFile = "%RptFile%"                                                        >> "%TmpPSScript%"
ECHO $BlankLine = "`r`n"                                                           >> "%TmpPSScript%"
ECHO (Get-Content $origFile) ^| Foreach-Object {                                   >> "%TmpPSScript%"
ECHO     $_ -replace "<!-- ", 'Task Name (and path): ' -replace "<Command>", 'Command: ' -replace "<[^>]+>", '' -replace '^^\s+', '' -replace '(?m)^^\s*\r?\n', ''>> "%TmpPSScript%"
ECHO     } ^| Set-Content $NewFile                                                 >> "%TmpPSScript%"
ECHO (Get-Content $NewFile) ^| ? {$_.trim() -ne "" } ^| Set-Content $NewFile       >> "%TmpPSScript%"
ECHO (Get-Content $NewFile) ^| Foreach-Object {                                    >> "%TmpPSScript%"
ECHO     $_ -replace "Task Name ", ($BlankLine + "Task Name ") -replace "-->", ''  >> "%TmpPSScript%"
ECHO     } ^| Set-Content $NewFile                                                 >> "%TmpPSScript%"
ECHO (Get-Content $NewFile ^| Select-Object -Skip 1) ^| Set-Content $NewFile       >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

結果

Task Name (and path): \Adobe Acrobat Update Task 
Command: C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe

Task Name (and path): \GoogleUpdateTaskMachineCore 
Command: C:\Program Files\Google\Update\GoogleUpdate.exe

Task Name (and path): \GoogleUpdateTaskMachineUA 
Command: C:\Program Files\Google\Update\GoogleUpdate.exe

Task Name (and path): \TopSecret 
Command: C:\Folder\CIA.exe
Command: C:\Folder\FBI.exe

ガッチャ

気づいたら Task Name なしの項目 Command その下のフィールド項目は、システムのスケジュールされたタスクなどが原因であるように見えます。 Actions としてリストされている Custom Handler 編集できない値は、以下の例とスクリーンショットを参照してください。

(コマンドなし)

Task Name (and path): \Microsoft\Windows\Shell\WindowsParentalControls 

Task Name (and path): \Microsoft\Windows\Shell\WindowsParentalControlsMigration 

Task Name (and path): \Microsoft\Windows\SideShow\AutoWake 

Task Name (and path): \Microsoft\Windows\SideShow\GadgetManager 

Task Name (and path): \Microsoft\Windows\SideShow\SessionAgent 

Task Name (and path): \Microsoft\Windows\SideShow\SystemDataProviders 

タスクスケジューラのジョブ設定 (コマンドやアクションがないもの) enter image description here


その他の資料


この美しさは言葉を超えています:)ありがとうございます!
AK_

アクションのパスにスペースが含まれていると、これは機能しません。出力例 Task Name (and path): \PA wake up Command: "C:\Users\IT Command\Documents\Batch Codes\PA\PA.bat" そして Task Name (and path): \Example One Command: C:\Users\IT
Mark Deven

スペースの後のテキストを属性として読みます
Mark Deven

アクションに引用符がない場合
Mark Deven

お疲れ様でした。私も私の問題に関連しているこの質問をしました: superuser.com/questions/1363277/schtasks-exe-with-quotes
Mark Deven

1

あなたが言うから:」 私はまだ彼らの行動が何であるかに関連してタスク名を見たいです。 "コメントでは、以下のバッチスクリプトの例を使って期待される出力を Windows 7

基本的にこれはなります:

  1. 詳細を実行 Schtasks 問い合わせ   出力をcsvファイルにダンプするコマンド
  2. WindowsネイティブのPowerShellを使って convertfrom-csv コマンド、   それはcsv出力をフォーマットのようなリストに変換します。
  3. そこからPowerShellを使います 選択する コマンド -property 必要なフィールドから値のみを取得するように切り替えます   見るだけ。
  4. PowerShell どこで でコマンド -notcontains 比較   オペレーター フィルタリングします   余分な外 TaskName 何らかの理由でダンプされるオブジェクト   csvファイル Schtasks コマンド。

注:このタスクにネイティブに使用できるものと使用できないものには制限があります。 Windows 7 以下のような新しいWindows OSを使っているよりも ウィンドウズ10

明示的なバッチスクリプト

あなたはと遊ぶ必要があるかもしれません -Width 256 より大きなまたはより小さなintを使用してください。

@ECHO ON

SET RptFile=C:\Folder\Path\TaskSchedReport.txt
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

ECHO schtasks /query /v /fo csv ^| ConvertFrom-CSV ^| >> "%TmpPSScript%"
ECHO Select -Property "TaskName","Task To Run" ^|     >> "%TmpPSScript%"
ECHO Where {$_.TaskName -notcontains "TaskName"} ^|   >> "%TmpPSScript%"
ECHO Out-File "%RptFile%" -Width 256                  >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

EXIT

バッチ出力スニペット

TaskName                                                                                                                         Task To Run                                                                                                                    
--------                                                                                                                         -----------                                                                                                                    
\Adobe Acrobat Update Task                                                                                                       C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe                                                                       
\Adobe Acrobat Update Task                                                                                                       C:\Program Files\Common Files\Adobe\ARM\1.0\AdobeARM.exe                                                                       
\GoogleUpdateTaskMachineCore                                                                                                     C:\Program Files\Google\Update\GoogleUpdate.exe /c                                                                             
\GoogleUpdateTaskMachineCore                                                                                                     C:\Program Files\Google\Update\GoogleUpdate.exe /c                                                                             
\GoogleUpdateTaskMachineUA                                                                                                       C:\Program Files\Google\Update\GoogleUpdate.exe /ua /installsource scheduler                                                   
\Microsoft\Microsoft Antimalware\Microsoft Antimalware Scheduled Scan                                                            c:\Program Files\Microsoft Security Client\\MpCmdRun.exe Scan -ScheduleJob -RestrictPrivileges                                 
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)       COM handler                                                                                                                    
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)       COM handler                                                                                                                    
\Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Manual)          COM handler                                                                                                                    
\Microsoft\Windows\Autochk\Proxy                                                                                                 %windir%\system32\rundll32.exe /d acproxy.dll,PerformAutochkOperations    

バッチスクリプト

@ECHO ON

SET RptFile=C:\Folder\Path\TaskSchedReport.txt
SET TmpPSScript=%Temp%\~tmpScheduleTasks.ps1
IF EXIST "%TmpPSScript%" DEL /Q /F "%TmpPSScript%"

ECHO schtasks /query /v /fo csv ^| ConvertFrom-CSV ^| >> "%TmpPSScript%"
ECHO Where {$_.TaskName -notcontains "TaskName"} ^|   >> "%TmpPSScript%"
ECHO Out-File "%RptFile%" -Width 256                  >> "%TmpPSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%TmpPSScript%'"

:: -- Below will open file to view content with the default text editor
explorer.exe "%RptFile%"

EXIT

ネイティブPowerShell明示的

おまけとして、私はあなたが結果を見るのに使うことができるまっすぐなPowerShell構文を含めました。なしでもなしでもテスト | FL 結果を比較します。

schtasks /query /v /fo csv | ConvertFrom-CSV |
Select -Property "TaskName","Task To Run" |
Where {$_.TaskName -notcontains "TaskName"} | FL

ネイティブPowerShell

schtasks /query /v /fo csv | ConvertFrom-CSV |
Where {$_.TaskName -notcontains "TaskName"} | FL

その他の資料


何という獣の答え!言葉が出ません。ありがとうございました! PowerShellを実行してもまだ複数のアクションが発生しています。これは、出力形式としてCSVを使用しているためだと思います。それをXMLに変更してそれが機能するかどうかを確認できますか?
AK_

実行すると: schtasks /query /v /fo csv | ConvertFrom-CSV | Select -Property "TaskName","Task To Run" | Where {$_.TaskName -notcontains "TaskName"} | FL 私はまだ手に入れています: TaskName : \Microsoft\Windows\MyTask Task To Run : Multiple actions CSVリストにはXMLほど多くの情報が含まれていないため、これは正常だと思います。私が解決策になり得ると思っていたのは、(複数の項目があっても)それぞれの「実行するタスク」を「タスク名」にリンクする1ライナーのXMLパーサーを実装することです。
AK_

してください - そしてそのような有用な詳細な回答をもう一度ありがとう!
AK_

いいですね; POCが有効になったらすぐに編集して回答に追加してください。本当にありがとうございました!
AK_
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.