我的脚本中具有以下功能
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时,我正在将字符显示在我要查找的一行上
有T恤:
不带发球区
我想我知道发生了什么事。由于将写主机转换为tee,因此任何开关都将被忽略,无论是彩色还是nonewline。如何使nonewline
与tee配合使用?
答案 0 :(得分:1)
在我们chat之后,我了解您正在尝试做什么。您想要编写一个自定义进度条,该进度条既可以写入日志文件,也可以写入控制台,并且两者都没有换行符。为此,您可以编写一个可以完成此功能的函数,但是我建议您选择一个与现有cmdlet不冲突的新名称。我将使用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
或者,如果您不想使用函数,则可以使用本机cmdlet来完成所有操作,如本例所示:
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}
(请注意,我将''
添加到日志文件的末尾,因此进度条完成后日志文件会换行)