web-dev-qa-db-ja.com

SCHTASKS / Queryにクエリ結果に「複数のアクション」属性を表示させる方法は?

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

たとえば、以下に示すように、actionsとして実行する複数のプログラムを持つ「MyTask」があります。 enter image description here

タスクスケジューラのコマンドラインバージョン(または:schtasks)でタスクが実行するプログラムのリストを表示したい。

だから私が走るとき:

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

しかし、以下に示すように、実際のアクション/プログラムではなく、「複数のアクション」というフレーズしか実行されません。 enter image description here

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

どうすればこれを解決できますか?

2
AK_

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

Windows 7およびWindows 10から実行されるバッチスクリプトを以下に示します。 -)。

本質的にこれは:

  1. schtasks/XMLスイッチで実行し、読み取ったすべての[〜#〜] xml [〜#〜]コンテンツを findstr コマンドでIスイッチ(大文字と小文字を区別しない)を使用して、<!--および<command>文字列を含む行のみをフラットファイルへの出力としてリダイレクトします。
  2. 次に、フラットファイルの内容が動的PowerShellスクリプトを介して実行され、[〜#〜] xml [〜# 〜]より適切にフォーマットされたフィールド名のタグ、すべての行から先頭の空白を削除し、すべての空白行を削除し、最後に各Task Nameフィールドの前に新しい行を配置しますが、最初の行はスキップされます。その前に行を付ける必要はありません—ファイルの一番上の行です。

注:Gotchas潜在的な異常の詳細と注意事項については、以下のセクションを参照してください。


バッチスクリプト

@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

ガッチャ

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

(コマンドなし)

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


その他のリソース

2
Pimp Juice IT

コメントで「タスク名とそのアクションの関係を確認したい」と言うので、以下のバッチスクリプトの例を使用して期待どおりの結果を得ることができます。 Windows 7で出力します。

本質的にこれは:

  1. Verbose schtasks queryコマンドを実行して、出力をcsvファイルにダンプします
  2. WindowsネイティブのPowerShell convertfrom-csv コマンドを使用すると、csv出力がリストのような形式に変換されます。
  3. そこから、PowerShell select コマンドと-propertyスイッチを使用して、表示したいフィールドからのみ値を取得します。
  4. PowerShell where コマンドと-notcontains比較演算子 は、何らかの理由でcsvファイルにダンプする余分なTaskNameオブジェクトを-で除外します。 schtasks コマンド。

注:Windows 7を使用すると、Windows 1などの新しいWindowsOSを使用する場合よりも、このタスクにネイティブに使用できるものとできないものに制限があります。

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

-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

その他のリソース

1
Pimp Juice IT