如何测量 powershell 脚本中不同功能的持续时间(以秒为单位)?

Posted

技术标签:

【中文标题】如何测量 powershell 脚本中不同功能的持续时间(以秒为单位)?【英文标题】:How do I measure duration (in seconds) for different functions in a powershell script? 【发布时间】:2021-10-03 20:59:51 【问题描述】:

我有一个运行大约 60 秒的 powershell 脚本。作为优化的一部分,我想知道脚本的哪一部分花费了更多时间。该脚本具有多个功能,例如对 ADO 中的 TFS 进行 restcall、验证内容、发布等。

即使没有优化空间,我也想为脚本中的每个任务提供持续时间的证据。我进行了研究并找到了使用 Measure cmd、秒表的选项,但我不确定如何在函数中使用它。感谢您的任何意见。

【问题讨论】:

这里有Measure-Command。 在Mathias R. Jessen 的this answer 底部查看一个名为PSProfiler 的不错的模块,其中包含一个名为Measure-Script 的函数,我认为它会对您有所帮助。 【参考方案1】:

作为Daniel kindly points out,我维护a module called PSProfiler,旨在从任意脚本或脚本块收集逐行执行时间测量:

# Install PSProfiler
Install-Module PSProfiler -Scope CurrentUser

# Import PSProfiler
Import-Module PSProfiler

# Profile sample script
Measure-Script -Name "Arunkumar's script " 
  Start-Sleep 1
  Start-Sleep 2

你会得到这样的输出:

    Anonymous ScriptBlock:
    Arunkumar's script


      Count  Line       Time Taken Statement
      -----  ----       ---------- ---------
          0     1    00:00.0000000 
          1     2    00:01.0116913   Start-Sleep 1
          1     3    00:02.0037062   Start-Sleep 2
          0     4    00:00.0000000 

示例脚本显然不是那么有趣,但正如您所见,它为您提供了每一行:

    A Count - 从该特定行开始执行语句的次数 测量的总执行时间。

这对于磨练您可能想要优化的确切行/语句很有用:-)


值得注意的是,PSProfiler 通过检测源代码来工作,因此只测量在脚本中编写的语句之间所用的时间。

如果您想要更精细的深入分析遥测,请查看Profiler by nohwnd

【讨论】:

感谢您的回答。我能够运行脚本并测量持续时间。我只是进行了如下更改以强制安装。非常感谢。安装模块 PSProfiler -Force

以上是关于如何测量 powershell 脚本中不同功能的持续时间(以秒为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

powershell 测量PowerShell命令或PowerShell脚本的速度

PowerShell - 多个 Get-Date 调用返回不同的时间格式/文化

如何在不同的运行空间中运行函数,PowerShell

Windows PowerShell使用

如何从 Powershell/其他脚本设置 Bamboo 变量?

不同控制台中的不同 PowerShell 脚本行为