There really is no easy way to do this.
The workaround is to override the default Write-Host behavior by defining a function with the same name:
function global:Write-Host() {}
It is very flexible. And this works for my simplified example above. However, for an unknown reason, it does not work in the real case when I wanted to apply (perhaps because the called script is signed and for security reasons it does not allow the caller to arbitrarily change the behavior).
, , - :
$stringWriter = New-Object System.IO.StringWriter
[System.Console]::SetOut($stringWriter)
[System.Console]::WriteLine("HI")
Write-Host("HI")
, , .