使用内联 PowerShell 任务计算 azure 管道中任务的运行时间

Posted

技术标签:

【中文标题】使用内联 PowerShell 任务计算 azure 管道中任务的运行时间【英文标题】:Calculate elapsed time for a task in azure pipeline using inline PowerShell tasks 【发布时间】:2022-01-24 07:00:59 【问题描述】:

我正在尝试在 inline 模式下使用 PowerShell 任务计算 Azure Pipeline 中任务所用的时间。简化的设置如下图所示。内联代码如下所述。我得到低于指定的错误。

Calculating Elapsed Time...
Cannot find an overload for "op_Subtraction" and the argument count: "2".
At D:\a\_temp\ba6b91f4-ef47-4a51-8088-efc6bcda310d.ps1:5 char:1
+ $duration_min = $end_time - $start_time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest
 
##[error]PowerShell exited with code '1'.

测量构建任务所用时间的正确方法是什么?

管道设置:

Get Start Time inline powershell 任务中的代码:

$start_time = Get-Date
Write-Host "Scanning Start Timestamp: $($start_time)"

Calculate Elapsed Time inline powershell 任务中的代码:

Write-Host "Calculating Elapsed Time..."
$end_time = Get-Date
$duration_min = $end_time - $start_time
Write-Host ("Total Time Elapsed in Minutes: ", $duration_min.TotalMinutes)

【问题讨论】:

您的代码对我来说很好用。您可以尝试将变量类型转换为[timespan]$duration_min = [datetime]$end_time - [datetime]$start_time 好的,好主意。您是否从同一个 PowerShell 任务中引用了两个变量 $start_time$end_time?因为我在添加类型转换后得到Cannot convert null to type "System.DateTime" 是的,我确实从同一个控制台引用了它们。您可以做的是将变量$end_time$start_time 初始化为[datetime]$end_time = Get-Date[datetime]$start_time= Get-Date,以避免将它们填充为$null 【参考方案1】:

任务之间的变量是独立的。要在任务之间传递值,我们可以使用管道变量。在您的设置中,转到变量选项卡并创建一个新变量 - 比如说 scan_start_time。

在“获取开始时间”任务中添加另一行

Write-Output "##vso[task.setvariable variable=scan_start_time]$($start_time)"

然后在“计算经过时间”任务中

$start_time = "$(scan_start_time)"

【讨论】:

以上是关于使用内联 PowerShell 任务计算 azure 管道中任务的运行时间的主要内容,如果未能解决你的问题,请参考以下文章

无法将环境变量传递给 azure 管道 yaml 中的 powershell 脚本(非内联)

Azure Pipelines:在 Powershell 中设置和访问变量

如何在 Azure DevOps 的 Powershell 内联脚本中正确连接字符串?

使用 Azure Devops 任务或 PowerShell 创建/更新 Azure WebApp 的路径映射

Azure devops powershell 任务问题

在 Azure Devops 中使用从一个 PowerShell 任务到另一个任务的变量值