eng/common/scripts/Helpers/CommandInvocation-Helpers.ps1 (55 lines of code) (raw):

function Invoke-LoggedCommand { [CmdletBinding()] param ( [string] $Command, [string] $ExecutePath, [switch] $GroupOutput, [int[]] $AllowedExitCodes = @(0) ) $pipelineBuild = !!$env:TF_BUILD $startTime = Get-Date if($pipelineBuild -and $GroupOutput) { Write-Host "##[group]$Command" } else { Write-Host "> $Command" } if($ExecutePath) { Push-Location $ExecutePath } try { Invoke-Expression $Command $duration = (Get-Date) - $startTime if($pipelineBuild -and $GroupOutput) { Write-Host "##[endgroup]" } if($LastExitCode -notin $AllowedExitCodes) { if($pipelineBuild) { Write-Error "##[error]Command failed to execute ($duration): $Command`n" } else { Write-Error "Command failed to execute ($duration): $Command`n" } } else { Write-Host "Command succeeded ($duration)`n" } } finally { if($ExecutePath) { Pop-Location } } } function Set-ConsoleEncoding { [CmdletBinding()] param ( [string] $Encoding = 'utf-8' ) $outputEncoding = [System.Text.Encoding]::GetEncoding($Encoding) [Console]::OutputEncoding = $outputEncoding [Console]::InputEncoding = $outputEncoding }