Powershell stdout流:一次1个字符

时间:2015-06-24 00:12:54

标签: powershell stdout

PS中许多命令的输出被突然转移到显示器上,我甚至不记得我键入的命令。我必须向上滚动几页才能看到。

是否可以减慢输出流的速度,以便我们可以在屏幕上经过它时读取它? ..即使这是一个错误,如果它是一个文明和可读的流,如C-SPAN上的隐藏字幕,我们可以更好地理解即使看似无聊的消息......

“更多”有效,但它一次只是整页。

我也在techrepublic找到了这个:

function EasyView { process { $_; Start-Sleep -seconds .5}}

Get-ChildItem C: | EasyView 

很酷,但一次输出1条完整记录..

我正在寻找流式传输,例如每0.5秒一个字母。就像在黑客帝国中一样,或者更好地喜欢与马修布罗德里克的战争游戏......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

绝不是完美的,但我只是在这里玩,试图安抚你的奇怪但好奇的我需要

function get-easyview{

    param([int]$Milliseconds= 50)
    $text = $input | Out-String 

    [char[]]$text | ForEach-Object{
        Write-Host -NoNewline $_
        # Only break for a non-whitespace character.
        if($_ -notmatch "\s"){Sleep -Milliseconds $Milliseconds}
    }
}

Get-ChildItem | get-easyview -Milliseconds 50

这将获取输入对象并将其转换为单个字符串,然后将其作为char数组。然后它会痛苦地一次显示一个字符,字符之间的间隔为X毫秒。我想用秒钟拍摄自己的脸。我听到一个打字机在脑海里看着这个。 注意:这只输出到主机控制台而不是标准输出流。这必须是最后一个管道命令。这没有可用的-passthru

找不到引用但PowerShell只能这么慢。我不认为我可以在1-20毫秒之间获得睡眠,并且有明显的差异。我的数字可能不对,但这是件事。

输出不是完全,因为它在屏幕上。我正在研究它。

不要忘记More

或PowerShell等效out-host -paging。使用输入,您可以“吸收”#34;信息按您自己的节奏。从this answer

中读取更多

Get-EasyView 2.0

我正在玩更多游戏,但是我想设置一个开关,这样你就可以使用一些简单的参数来按字符或直线进行。

function get-easyview{

    param(
        [int]$Milliseconds= 50,
        [ValidateSet("Line","Character")] 
        [String] 
        $Pace = "Character"
    )

    If($pace -eq "Character"){
        $text = [char[]]($input | Out-String)
        $parameters = @{NoNewline = $true}
    } Else {
        $text = ($input | out-string) -split "`r`n"
        $parameters = @{NoNewline = $false}
    }

    $text | ForEach-Object{
        Write-Host $_ @parameters
        if($_ -notmatch "^\s+$"){Sleep -Milliseconds $Milliseconds}
    }
}

所以现在你可以做这样的电话

Get-ChildItem | get-easyview -Milliseconds 50
Get-ChildItem | get-easyview -Milliseconds 1000 -Pace Line
Get-ChildItem | get-easyview -Milliseconds 50 -Pace Character