Вычисляемое свойство Powershell Get-Job Format-Table - PullRequest
1 голос
/ 07 марта 2019

У меня есть работа, и я хочу получить хороший результат. В настоящее время использую это:

Get-Job | Format-Table -Property name, state, @{n = 'Started'; e = {$($_.psbegintime).tostring("HH:mm:ss")}}, @{n = 'Completed'; e = {$($_.psendtime).tostring("HH:mm:ss")}}

Я хотел бы создать еще один столбец с n = 'Elapsed'.
Если задание выполняется, оно должно рассчитать

$(get-date) - $_.psbegintime

если задание выполнено, то должно вычисляться

$_.psendtime - $_.psbegintime

Я пытался $(if ($_.state -ieq "running") {$(get-date) - $_.psbegintime} {$_.psendtime - $_.psbegintime}), но у него странный вывод: {00:00:05.0532890, $($_.psendtime - $_.psbegintime)}.
Я думал, что смогу заменить $_.psendtime причину значения null (($_.psendtime, get-date)[0]), но у меня снова не получилось.

Спасибо за помощь!

1 Ответ

4 голосов
/ 07 марта 2019

Как указывает @rokumaru, в выражении отсутствует блок else, поэтому вы возвращаете scriptblock вместо результата вычисления плюс результат оператора if, если он был успешным.

Я предлагаю вам разбить ваш код, чтобы сделать его более читабельным (особенно если он в скрипте):

#requires -Version 4

$prop = @{
    'PipelineVariable' = 'job'
    'Property'         = @(
        'Name', 'State'
        @{ Name = 'Started'; Expression = { $job.PSBeginTime.ToString('HH:mm:ss') } }
        @{ Name = 'Completed'; Expression = { $job.PSEndTime.ToString('HH:mm:ss') } }
        @{
            Name       = 'Elapsed'
            Expression = {
                if ($job.State -eq 'Running') {
                    ((Get-Date) - $job.PSBeginTime).ToString('HH:mm:ss')
                }
                else {
                    ($job.PSEndTime - $job.PSBeginTime).ToString('HH:mm:ss')
                }
            }
        }
    )
}
Get-Job | Format-Table @prop

about_CommonParameters: см. PipelineVariable

about_Splatting

Calculated Properties: см. Propertyпараметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...