Это поведение (или, вернее, строка формата) жестко запрограммировано в хосте PowerShell по умолчанию, и нет перехватчиков для его переопределения. Вам придется реализовать свой собственный хост или изменить вызывающий код, чтобы использовать правильную структуру ведения журналов, ни один из которых не является особенно простым.
Если вы по крайней мере управляете внешним вызовом, у вас есть возможность перенаправить вывод подробного потока, и мы можем использовать это в сочетании с командлетом для «сортировки» настроек:
function Verbosi-Tee {
[CmdletBinding()]
Param (
[Parameter(ValueFromPipeline = $true)]
$o
)
Process {
if ($o -is [System.Management.Automation.VerboseRecord]) {
Write-Verbose "[$([System.Threading.Thread]::CurrentThread.ManagedThreadId)] $($o.Message)"
} else {
$o
}
}
}
Пример использования:
$VerbosePreference = "continue"
$x = (&{
Write-Verbose "This is verbose."
Write-Output "This is just regular output."
} >4&1 | Verbosi-Tee) # redirect, then pipe
"We captured the output in `$x: $x"
Вывод (в моей системе):
VERBOSE: [16] This is verbose.
We captured the output in $x: This is just regular output.
Название командлета - ложь, потому что это на самом деле не реализует полный tee
, но хороший каламбур - это его собственная награда.