lib/core/tools/Start-IcingaProcess.psm1

function Start-IcingaProcess()
{
    param(
        [string]$Executable,
        [string]$Arguments,
        [switch]$FlushNewLines
    );

    $processData = New-Object System.Diagnostics.ProcessStartInfo;
    $processData.FileName = $Executable;
    $processData.RedirectStandardError = $true;
    $processData.RedirectStandardOutput = $true;
    $processData.UseShellExecute = $false;
    $processData.Arguments = $Arguments;

    $process = New-Object System.Diagnostics.Process;
    $process.StartInfo = $processData;
    $process.Start() | Out-Null;

    $stdout = $process.StandardOutput.ReadToEnd();
    $stderr = $process.StandardError.ReadToEnd();
    $process.WaitForExit();

    if ($flushNewLines) {
        $stdout = $stdout.Replace("`n", '').Replace("`r", '');
        $stderr = $stderr.Replace("`n", '').Replace("`r", '');
    } else {
        if ($stdout.Contains("`n")) {
            $stdout = $stdout.Substring(0, $stdout.LastIndexOf("`n"));
        }
    }
    return @{
        'Message'  = $stdout;
        'Error'    = $stderr;
        'ExitCode' = $process.ExitCode;
    };
}