在PowerShell中执行命令的执行
有没有一种简单的方法来在PowerShell中执行命令,例如Linux中的“time”命令?
我想出了这个:
$s=Get-Date; .\do_something.ps1 ; $e=Get-Date; ($e - $s).TotalSeconds
但是我想要更简单的东西
time .\do_something.ps1
对。
Measure-Command { .\do_something.ps1 }
请注意,Measure-Command的一个小缺点是,您看不到stdout输出。 如果你想看到输出,那么你可以使用.NET秒表对象,例如:
$sw = [Diagnostics.Stopwatch]::StartNew() .\do_something.ps1 $sw.Stop() $sw.Elapsed
您也可以从历史logging中获取最后一个命令,并从StartExecutionTime
减去EndExecutionTime
。
.\do_something.ps1 $command = Get-History -Count 1 $command.EndExecutionTime - $command.StartExecutionTime
使用Measure-Command
例
Measure-Command { <your command here> | Out-Host }
到Out-Host
的pipe道允许您查看命令的输出,否则该命令会被Measure-Command
消耗。
Simples
function time($block) { $sw = [Diagnostics.Stopwatch]::StartNew() &$block $sw.Stop() $sw.Elapsed }
然后可以使用
time { .\some_command }
你可能想要调整输出
使用秒表和格式化已用时间:
Function FormatElapsedTime($ts) { $elapsedTime = "" if ( $ts.Minutes -gt 0 ) { $elapsedTime = [string]::Format( "{0:00} min. {1:00}.{2:00} sec.", $ts.Minutes, $ts.Seconds, $ts.Milliseconds / 10 ); } else { $elapsedTime = [string]::Format( "{0:00}.{1:00} sec.", $ts.Seconds, $ts.Milliseconds / 10 ); } if ($ts.Hours -eq 0 -and $ts.Minutes -eq 0 -and $ts.Seconds -eq 0) { $elapsedTime = [string]::Format("{0:00} ms.", $ts.Milliseconds); } if ($ts.Milliseconds -eq 0) { $elapsedTime = [string]::Format("{0} ms", $ts.TotalMilliseconds); } return $elapsedTime } Function StepTimeBlock($step, $block) { Write-Host "`r`n*****" Write-Host $step Write-Host "`r`n*****" $sw = [Diagnostics.Stopwatch]::StartNew() &$block $sw.Stop() $time = $sw.Elapsed $formatTime = FormatElapsedTime $time Write-Host "`r`n`t=====> $step took $formatTime" }
用法示例
StepTimeBlock ("Publish {0} Reports" -f $Script:ArrayReportsList.Count) { $Script:ArrayReportsList | % { Publish-Report $WebServiceSSRSRDL $_ $CarpetaReports $CarpetaDataSources $Script:datasourceReport }; } StepTimeBlock ("My Process") { .\do_something.ps1 }
这是我写的一个函数,它和Unix time
命令类似:
function time { Param( [Parameter(Mandatory=$true)] [string]$command, [switch]$quiet = $false ) $start = Get-Date try { if ( -not $quiet ) { iex $command | Write-Host } else { iex $command > $null } } finally { $(Get-Date) - $start } }
资料来源: https : //gist.github.com/bender-the-greatest/741f696d965ed9728dc6287bdd336874