¿Cómo retengo ScriptStackTrace en una excepción lanzada desde un Invoke-Command en una computadora remota?

Estoy escribiendo un script de Powershell que ejecuta uno de los pasos en mi proceso de compilación / implementación, y necesita ejecutar algunas acciones en una máquina remota. El script es relativamente complejo, por lo que si se produce un error durante esa actividad remota, quiero un seguimiento detallado de la pila de dónde se produjo el error (más allá del registro que ya se produjo).

El problema surge porque Invoke-Command pierde información de seguimiento de la pila al transmitir excepciones de terminación desde una máquina remota. Si se invoca un bloque de script en la máquina local:

Invoke-Command -ScriptBlock {
    throw "Test Error";
}

Se devuelve el detalle de excepción requerido:

Test Error
At C:\ScriptTest\Test2.ps1:4 char:2
+     throw "Test Error";
+     ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:String) [], RuntimeException
    + FullyQualifiedErrorId : Test Error

Pero si se ejecuta de forma remota:

Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
    throw "Test Error";
}

Los puntos de rastreo de la pila de excepción a todo el bloque Invoke-Command:

Test Error
At C:\ScriptTest\Test2.ps1:3 char:1
+ Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:String) [], RuntimeException
    + FullyQualifiedErrorId : Test Error

Puedo transportar el exc, eption de vuelta a la máquina local manualmente:

$exception = Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
    try
    {
        throw "Test Error";
    }
    catch
    {
        return $_;
    }
}

throw $exception;

Pero volver a lanzarlo pierde el rastro de la pila:

Test Error
At C:\ScriptTest\Test2.ps1:14 char:1
+ throw $exception;
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:PSObject) [], RuntimeException
    + FullyQualifiedErrorId : Test Error

Si escribo la excepción a Salida:

$exception = Invoke-Command -ComputerName $remoteComputerName -ScriptBlock {
    try
    {
        throw "Test Error";
    }
    catch
    {
        return $_;
    }
}

Write-Output $exception;

Obtengo la información de seguimiento de pila correcta:

Test Error
At line:4 char:3
+         throw "Test Error";
+         ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Test Error:String) [], RuntimeException
    + FullyQualifiedErrorId : Test Error

Pero como no está en la secuencia de error, mis herramientas de compilación no lo captan correctamente. Si intento Write-Error, tengo un problema similar al volver a lanzar la excepción y los puntos de seguimiento de la pila a la parte incorrecta del script.

Entonces, mi pregunta es: ¿cómo hago para que Powershell informe la excepción desde una máquina remota como si se hubiera generado localmente, con la misma información de rastreo de pila y en la secuencia de Error?

Respuestas a la pregunta(3)

Su respuesta a la pregunta