Можно ли настроить префикс подробного сообщения в Powershell? - PullRequest
2 голосов
/ 19 мая 2019

Текущий префикс подробного сообщения просто VERBOSE:

Я бы хотел изменить его на VERBOSE[N]:, где N - текущий идентификатор потока.

Возможно ли это?

1 Ответ

0 голосов
/ 20 мая 2019

Это поведение (или, вернее, строка формата) жестко запрограммировано в хосте 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, но хороший каламбур - это его собственная награда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...