パーティーに遅れていることは知っていますが、@ Frode F.からの回答は機能しますが、技術的には正しくありません。
PowerShellを介して、スケジュールされたタスクのActionsコレクションのアイテムにアクセスできますが、すぐにはわかりません。今日も自分でこれを理解しなければなりませんでした。
XMLをいじくり回すことなく、PowerShellでこれをすべて行うためのコードは次のとおりです。
# I'm assuming that you have a scheduled task object in the variable $task:
$taskAction = $task.Definition.Actions.Item.Invoke(1) # Collections are 1-based
を使用せずにコレクションから1つのアイテムを取得する方法はこれですべてforeach
です。
Actions
プロパティはパラメーター化されたプロパティを含むコレクションであるためItem
(たとえば、C#では作成するmyTask.Actions[0]
かVBでmyTask.Actions.Item(1)
)、PowerShellはItem
プロパティをPSParameterizedProperty
オブジェクトとして表します。プロパティに関連付けられたメソッドを呼び出すには、Invoke
メソッド(ゲッターの場合)とInvokeSet
メソッド(セッターの場合)を使用します。
OPのコードを実行して簡単なテストを実行しましたが、うまくいきました(ただし、PowerShell 4.0を実行しているので、それと関係があるかもしれません)。
$schedule = new-object -com("Schedule.Service")
$schedule.connect()
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks | select Name, LastRunTime
foreach ($t in $tasks)
{
foreach ($a in $t.Actions)
{
Write-Host "Task Action Path: $($a.Path)" # This worked
Write-Host "Task Action Working Dir: $($a.workingDirectory)" # This also worked
}
$firstAction = $t.Actions.Item.Invoke(1)
Write-Host "1st Action Path: $($firstAction.Path)"
Write-Host "1st Action Working Dir: $($firstAction.WorkingDirectory)"
}
HTH。