Попытка вывести 2 объекта из массива, используя объект сортировки для одного из них. - PullRequest
1 голос
/ 02 июня 2019

У меня есть массив запланированных задач и их время выполнения. Я хочу отсортировать массив в следующем порядке, но не могу выбрать для вывода имя задачи и время выполнения.

Я получаю запланированные задачи и время выполнения с удаленного компьютера следующим образом:

$Array = @(Invoke-Command -CN blahcomputernameblah {schtasks.exe /query /fo csv | ConvertFrom-Csv | select "Next Run Time" , TaskName)

Результат примерно такой:

Next Run Time        TaskName
-------------        --------
6/3/2019 8:00:00 PM  \Start Banana
6/3/2019 4:00:00 PM  \Start Apple
6/5/2019 9:30:00 AM  \Start Orange
6/3/2019 10:15:00 PM \Stop Banana
6/3/2019 6:15:00 PM  \Stop Apple
6/5/2019 11:45:00 AM \Stop Orange

Следующей задачей будет \Start Apple at 6/3/2019 4:00:00 PM.

Итак, я хочу отсортировать этот массив на основе следующего времени выполнения и выбрать -first 1, но я могу получить только следующий запуск без имени задачи. Я преобразую строку даты и времени в DateTime для действия сортировки:

$Array | %{[DateTime] $_."Next Run Time"} | sort | select -First 1

Но я не знаю, как добавить TaskName к выводу

Любая помощь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 02 июня 2019

Поскольку вывод файла schtasks.exe локализован, я предлагаю использовать эквивалентные командлеты PowerShell напрямую, чтобы избежать непосредственного преобразования [datetime].

 Get-ScheduledTask | 
  Get-ScheduledTaskInfo | 
   Where-Object NextRunTime | 
    Sort-Object NextRunTime | 
     Select-Object TaskName,NextRunTime -First 1
0 голосов
/ 02 июня 2019

Попробуйте сделать то, что вам нужно, с помощью объектов сценариев Task Scheduler и их API.Полную информацию можно получить из справочника планировщика задач .Следующий скрипт демонстрирует, как это сделать.

$schedsvc = New-Object -ComObject Schedule.Service
$schedsvc.Connect()
$fq = New-Object System.Collections.Queue
$fq.Enqueue($schedsvc.GetFolder('\'))
$tc = while ( $fq.Count -gt 0 ) {
  $f = $fq.Dequeue()
  $f.GetFolders(0) | ForEach-Object { $fq.Enqueue($_) }
  $f.GetTasks(0) | Select-Object Name, NextRunTime
}
$tc | Where-Object { $_.NextRunTime -gt (Get-Date)} |
  Sort-Object -Property NextRunTime | Select-Object -First 1 |
    Format-Table -AutoSize

Вывод:

Name                                  NextRunTime
----                                  -----------
Opera scheduled Autoupdate 1542563984 02.06.2019 22:17:10
0 голосов
/ 02 июня 2019

Вы можете создать свойство для вашего выбора следующим образом:

schtasks.exe /query /fo csv | ConvertFrom-Csv | select @{N="DateRunTime";E={[DateTime]$_."Next Run Time"}}, TaskName | sort DateRunTime | select -First 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...