Как записать в консоль и файл журнала за один вызов в Powershell с CR LF newlines - PullRequest
5 голосов
/ 13 ноября 2010

У меня есть скрипт 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

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

Ответы [ 2 ]

8 голосов
/ 13 ноября 2010

Попробуйте:

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

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

3 голосов
/ 13 ноября 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 }
    }
}
...