Как мне написать в консоль и лог-файл за один вызов в Powershell с новыми строками CR LF

У меня есть сценарий powershell, и я хочу писать в консоль и записывать в файл журнала одним вызовом.

Я делал это...

Start-Transcript -Path $TargetDir\Log.log
Write-Host "Stuff"

... который отлично работает, за исключением того, что новые строки, которые он генерирует, являются LF, что означает, что мои журналы отлично выглядят в любом текстовом редакторе на земле, кроме блокнота.

Вот что у меня есть для этого...

function global:Write-Notepad
(
    [string] $Message,
    [string] $ForegroundColor = 'Gray'
)
{
    Write-Host "$Message`r" -ForegroundColor $ForegroundColor
}

... который записывает CR в конец каждого сообщения, но, похоже, не выводит такие строки...

&$ACommand | Write-Notepad

Я не уверен, какой синтаксис ожидает оператор конвейера, но я был бы очень признателен за помощь.


person user467384    schedule 12.11.2010    source источник


Ответы (2)


Попробуй это:

& $ACommand | Tee-Object -FilePath $TargetDir\Log.log | Write-Host

Tee-Object отправит копию объектов конвейера в файл или переменную и одновременно выведет.

person JasonMArcher    schedule 13.11.2010

Вот решение, на котором я остановился...

# This method adds a CR character before the newline that Write-Host generates.
# This is necesary, because notepad is the only text editor in the world that
# doesn't recognize LF newlines, but needs CR LF newlines.
function global:Write-Notepad
(
    [string] $Message,
    [string] $ForegroundColor = 'Gray'
)
{
    Process
    {
        if($_){ Write-Host "$_`r" }
    }
    End
    {
        if($Message){ Write-Host "$Message`r" -ForegroundColor $ForegroundColor }
    }
}
person user467384    schedule 13.11.2010