Private/Invoke-TechCareProcess.ps1
|
function Invoke-TechCareProcess { <# .SYNOPSIS Ejecuta un binario externo y devuelve su codigo de salida y su salida. .DESCRIPTION DISM, sfc, chkdsk, powercfg y winget comunican el resultado por codigo de salida y por texto, y cada uno de forma distinta. Esta envoltura unifica ambos en un objeto para que los modulos no repitan el manejo de errores. No impone limite de tiempo: DISM y sfc pueden tardar media hora en una imagen muy danada y cortarlos a medias deja el almacen de componentes en peor estado que no haber empezado. #> [CmdletBinding()] [OutputType([pscustomobject])] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$FilePath, [AllowEmptyCollection()] [string[]]$ArgumentList = @() ) $result = [pscustomobject]@{ ExitCode = 0; Output = '' } try { $global:LASTEXITCODE = 0 $output = & $FilePath @ArgumentList 2>&1 | Out-String $result.ExitCode = $LASTEXITCODE $result.Output = $output.Trim() } catch { # -1 no lo devuelve ningun binario de Windows, asi que distingue "no se # pudo lanzar" de cualquier codigo real del proceso. $result.ExitCode = -1 $result.Output = $_.Exception.Message } return $result } |