почему тройник не работает с NoNewline? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть следующая функция в моем скрипте

function Write-Host($object) 
{
    if($global:LogFile -eq $null)
    {
        $global:LogFile = $logFile
    }

    $object | tee $global:LogFile -Append
}

, ссылающаяся на этот пост: https://stackoverflow.com/a/25847258/8397835

Я пытаюсь именно эту часть здесь:

$job = Start-Job -ScriptBlock { Start-Sleep -Seconds 10 }
while (($job.State -eq "Running") -and ($job.State -ne "NotStarted"))
{
    Write-Host ([char]9632) -NoNewLine
    Start-Sleep -Seconds 1
}

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

с tee:

tee

без тройника

without tee

Думаю, я знаю, что происходит.так как write-host конвертируется в tee, все переключатели игнорируются, будь то цвет или, в данном случае, не линия.Как я могу заставить nonewline работать с тройником?

1 Ответ

1 голос
/ 26 июня 2019

После нашего чата Я понимаю, что вы пытаетесь сделать. Вы хотите написать собственный индикатор выполнения, который записывает как в файл журнала, так и в консоль без разрывов строк. Для этого вы можете написать функцию, которая выполнит ее, но я рекомендую выбрать новое имя, которое не конфликтует с существующим командлетом. Я буду использовать Write-MyProgress.

Function Write-MyProgress{ 
[cmdletbinding()] 
Param( 
    [parameter(valuefrompipeline=$true)]$message, 
    [switch]$NoNewLine 
)
    if($global:LogFile -eq $null) 
    { 
        $global:LogFile = $logFile 
    }
    Add-Content -Value $message -Path $LogFile -NoNewline:$NoNewLine
    Write-Host $Message -NoNewLine:$NoNewLine 
}

Затем вы можете вызвать это явно:

Write-MyProgress ([char]9632) -NoNewLine

или отправьте вещи к нему:

[char]9632 | Write-MyProgress -NoNewLine

Или, если вы не хотите использовать функцию, вы можете просто сделать все это с помощью собственных командлетов, как в этом примере:

1..10 | ForEach-Object -Process {
    [char]9632 | Add-Content $LogFile -NoNewLine -PassThru | Write-Host -NoNewLine
    start-sleep -Sec 1
} -End {Add-Content -Value '' -Path $LogFile}

(Обратите внимание, что в конце я добавляю '' к файлу журнала, чтобы после завершения индикатора выполнения файл журнала получал новую строку)

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