使用内联 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 内联脚本中正确连接字符串?