Public/Functions/Invoke-Exe.ps1

function Invoke-Exe {
    <#
    .SYNOPSIS
    Run External Command.
 
    .DESCRIPTION
    This function calls an external command outside of the powershell script and logs the output.
 
    .PARAMETER Executable
    Executable that needs to be run.
 
    .PARAMETER Arguments
    Arguments for the executable. Default is NULL.
 
    .EXAMPLE
    Invoke-Exe dir c:\
     
    .LINK
    https://github.com/OSDeploy/OSD/tree/master/Docs
    #>

    
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string]$Executable,

        [Parameter(ValueFromRemainingArguments = $true, ValueFromPipelineByPropertyName = $true)]
        $Arguments = $null
    )
    Write-Host -ForegroundColor DarkGray "Invoke-Exe '$Executable' Arguments '$Arguments'"
    $Out = &$Executable $Arguments 2>&1 | Out-String
    if ($Out.Trim()) {
        $Out.Trim().Split("`n") | ForEach-Object {
            Write-Host -ForegroundColor DarkGray "$_"
        }
    }
}