plugins/vault/private/Invoke-JaxNativeCommandWithStandardInput.ps1
|
function Invoke-JaxNativeCommandWithStandardInput { [CmdletBinding()] param( [Parameter(Mandatory)] [string] $FilePath, [Parameter(Mandatory)] [string[]] $Arguments, [Parameter(Mandatory)] [AllowEmptyString()] [string] $StandardInput ) $startInfo = [System.Diagnostics.ProcessStartInfo]::new() $startInfo.FileName = $FilePath $startInfo.UseShellExecute = $false $startInfo.RedirectStandardInput = $true $startInfo.RedirectStandardOutput = $true $startInfo.RedirectStandardError = $true foreach ($argument in $Arguments) { $startInfo.ArgumentList.Add($argument) } $process = [System.Diagnostics.Process]::new() $process.StartInfo = $startInfo try { if (-not $process.Start()) { throw "Failed to start native command '$FilePath'." } $standardOutput = $process.StandardOutput.ReadToEndAsync() $standardError = $process.StandardError.ReadToEndAsync() # Write(), rather than WriteLine(), is required for credentials: a # trailing newline becomes part of Vault's GitHub Authorization header. $process.StandardInput.Write($StandardInput) $process.StandardInput.Close() $process.WaitForExit() return [pscustomobject]@{ ExitCode = $process.ExitCode StdOut = $standardOutput.GetAwaiter().GetResult() StdErr = $standardError.GetAwaiter().GetResult() } } finally { $process.Dispose() } } |