web-dev-qa-db-ja.com

PowerShellスクリプトでタスクスケジューラに関する情報を出力する方法

ローカルコンピュータのTask Schedulerからの情報をPowerShellスクリプトで印刷しようとしています。これにより、他のユーザーもこの情報を印刷でき、Task Schedulerにアクセスする必要がなくなります。印刷するにはスクリプトが必要です

  • 名前、
  • 状態、
  • トリガー、
  • 次の実行時、
  • 前回の実行時、
  • 最後の実行結果、
  • 著者、
  • 作成した。

名前、次回の実行時間、および最後の実行時間に関する情報を出力できますが、スクリプトを実行しても残りは出力されません。

私は既にスクリプトを少し始めて、フィールドをダウンさせています。

$schedule = new-object -com("Schedule.Service") 
$schedule.connect() 
$tasks = $schedule.getfolder("\").gettasks(0)

$tasks | select Name,Status,Triggers,NextRunTime,LastRunTime,LastRunResult,Author,Created | ft

foreach ($t in $tasks)
{
foreach ($a in $t.Actions)
{
$a.Path
}
}

任意の助けや提案をいただければ幸いです。

以下は私が探しているものとデータを印刷していないフィールドのスクリーンショットです:

Below is a screenshot with what i am looking for and what fields arent printing out data:

8
user38725

これは少しクリーンアップできます(つまり、LastRunResultコードのマッピング)。サポートが必要な場合はお知らせください。 GUIでタスクを表示したときに表示される単純な英語の表現がCOMオブジェクトに存在するとは思わないので、トリガーは少し難しいです。 RegisteredTask.Definition.Triggersに保存されているTriggerCollectionから構築する必要があると思います

$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$out = @()
$sched.GetFolder("\").GetTasks(0) | % {
    $xml = [xml]$_.xml
    $out += New-Object psobject -Property @{
        "Name" = $_.Name
        "Status" = switch($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} 4 {"Running"}}
        "NextRunTime" = $_.NextRunTime
        "LastRunTime" = $_.LastRunTime
        "LastRunResult" = $_.LastTaskResult
        "Author" = $xml.Task.Principals.Principal.UserId
        "Created" = $xml.Task.RegistrationInfo.Date
    }
}

$out | fl Name,Status,NextRuNTime,LastRunTime,LastRunResult,Author,Created
5
pk.

Server 2012 R2とWindows 8.1にはタスクスケジューラコマンドレットがあり、このモジュールをコピーしてWindows 7マシンで使用できます。おそらく最新の.NETとWindows管理フレームワークも必要になると考えられます。スケジュールされたタスクを無効にして再度有効にしたり、タスク情報を表示したりできます。現在、この情報を提供したり、このコントロールを許可したりする組み込みのコマンドレットについては知りません。

マシンでスケジュールされているすべてのタスクを一覧表示するには:

Get-ScheduledTask

タスクシーケンスオブジェクトから次のメンバーを取得できます。

PS C:\BigHomie> $A = Get-ScheduledTask | select -First 1

PS C:\BigHomie> $A

       TypeName: Microsoft.Management.Infrastructure.CimInstance#Root/Microsoft/Windows/TaskScheduler/MSFT_ScheduledTask

Name                      MemberType     Definition
----                      ----------     ----------
Clone                     Method         System.Object ICloneable.Clone()
Dispose                   Method         void Dispose(), void IDisposable.Dispose()
Equals                    Method         bool Equals(System.Object obj)
GetCimSessionComputerName Method         string GetCimSessionComputerName()
GetCimSessionInstanceId   Method         guid GetCimSessionInstanceId()
GetHashCode               Method         int GetHashCode()
GetObjectData             Method         void GetObjectData(System.Runtime.Serialization.SerializationInfo info, Sys...
GetType                   Method         type GetType()
ToString                  Method         string ToString()
Actions                   Property       CimInstance#InstanceArray Actions {get;set;}
Author                    Property       string Author {get;set;}
Date                      Property       string Date {get;set;}
Description               Property       string Description {get;set;}
Documentation             Property       string Documentation {get;set;}
Principal                 Property       CimInstance#Instance Principal {get;set;}
PSComputerName            Property       string PSComputerName {get;}
SecurityDescriptor        Property       string SecurityDescriptor {get;set;}
Settings                  Property       CimInstance#Instance Settings {get;set;}
Source                    Property       string Source {get;set;}
TaskName                  Property       string TaskName {get;}
TaskPath                  Property       string TaskPath {get;}
Triggers                  Property       CimInstance#InstanceArray Triggers {get;set;}
URI                       Property       string URI {get;}
Version                   Property       string Version {get;set;}
State                     ScriptProperty System.Object State {get=[Microsoft.PowerShell.Cmdletization.GeneratedTypes...


PS C:\BigHomie> $A.Triggers


Enabled            : True
EndBoundary        :
ExecutionTimeLimit :
Id                 :
Repetition         : MSFT_TaskRepetitionPattern
StartBoundary      :
PSComputerName     :
5
MDMoore313