El espacio de ejecución omite el PSHostUserInterface personalizado

El fondo

Estoy escribiendo una aplicación que ejecuta programáticamente los scripts de PowerShell. Esta aplicación tiene una costumbre.PSHost Implementación para permitir que los scripts generen declaraciones de registro. Actualmente, el comportamiento que estoy viendo es quealgunos las solicitudes se envían correctamente a mi costumbrePSHost y otros son completamente ignorados.

Las cosas se ponen aún más extrañas cuando comencé a inspeccionar el$Host variable en mis scripts, que parecen sugerir que mi costumbrePSHost ni siquiera se está utilizando.

El código

Tengo algún código que ejecuta PowerShell dentro de una aplicación .NET:

var state = InitialSessionState.CreateDefault();
state.AuthorizationManager = new AuthorizationManager("dummy"); // Disable execution policy

var host = new CustomPsHost(new CustomPsHostUI());

using (var runspace = RunspaceFactory.CreateRunspace(host, state))
{
    runspace.Open();

    using (var powershell = PowerShell.Create())
    {
        powershell.Runspace = runspace;

        var command = new Command(filepath);

        powershell.Invoke(command);
    }
}

La implementación paraCustomPsHost Es muy mínimo, solo contiene lo que se necesita para reenviar elPSHostUserInterface:

public class CustomPsHost : PSHost
{
    private readonly PSHostUserInterface _hostUserInterface;

    public CustomPsHost(PSHostUserInterface hostUserInterface)
    {
        _hostUserInterface = hostUserInterface;
    }

    public override PSHostUserInterface UI
    {
        get { return _hostUserInterface; }
    }

    // Methods omitted for brevity
}

El CustomPsHostUI se utiliza como un contenedor para el registro:

public class CustomPsHostUI : PSHostUserInterface
{
    public override void Write(string value) { Debug.WriteLine(value); }
    public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value){ Debug.WriteLine(value); }
    public override void WriteLine(string value) { Debug.WriteLine(value); }
    public override void WriteErrorLine(string value) { Debug.WriteLinevalue); }
    public override void WriteDebugLine(string message) { Debug.WriteLine(message); }
    public override void WriteProgress(long sourceId, ProgressRecord record) {}
    public override void WriteVerboseLine(string message) { Debug.WriteLine(message); }

    // Other methods omitted for brevity
}

En mi script de PowerShell, estoy tratando de escribir información en el host:

Write-Warning "This gets outputted to my CustomPSHostUI"
Write-Host "This does not get outputted to the CustomPSHostUI"

Write-Warning $Host.GetType().FullName # Says System.Management.Automation.Internal.Host.InternalHost
Write-Warning $Host.UI.GetType().FullName # Says System.Management.Automation.Internal.Host.InternalHostUserInterface

¿Por qué estoy teniendo el comportamiento extraño con miCustomPSHostUI?

Respuestas a la pregunta(2)

Su respuesta a la pregunta