2015-06-24 120 views
0

PS中很多命令的輸出會突然顯示在顯示器上,我甚至不記得輸入了什麼命令。我必須向上滾動幾頁才能看到。Powershell標準輸出流:每次輸入1個字符

是否有可能減慢輸出流,所以我們可以在屏幕上通過時讀取它?即使它是一個錯誤,如果它出現在一個文明可讀的流中,就像在C-SPAN上隱藏字幕一樣,我們可以更好地理解即使看起來很無聊的消息......

「更多」的作品,但它是一個整個頁面一次。

我也發現了這個在TechRepublic的:

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

Get-ChildItem C: | EasyView 

這是很酷,但它一次輸出1個全記錄..

我要找流,1個字母每0.5秒爲例。就像在矩陣中,或者更好的是在馬修·布羅德里克的戰爭遊戲中......

有什麼想法?

+1

調用這個通常用命令行的工作方式是,你不想放慢輸出(尤其是如果有幾頁輸出)。相反,你會說'whatever_command> output.txt 2> errors.txt',你可以在閒暇時打開和閱讀文本文件。還是你已經嘗試過這種方法? – Teepeemm

+2

'out-host -paging'是與「more」等效的PS應該是你想要的。按Enter鍵而不是空格,一次只能進行一行。 ['Get-History'或者只是'h'](https://technet.microsoft.com/en-us/library/hh847753.aspx)將包含命令歷史記錄以便於查看。 – Matt

+0

嗨 - 感謝您的想法。 - 我試圖一次輸出stdout一個字符。試圖避免完整的頁面瀏覽... – Danny

回答

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。使用輸入您可以按自己的步調「吸收」信息。閱讀更多this answer

GET-EASYVIEW 2.0

我打得更多,我雖然關於設置一個開關,這樣你可以通過文字或線條使用一些簡單的parameteres去。

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 
+0

我愛你的男人。 – Danny

+0

@ user3430152如果有任何安慰:我也愛我!我還添加了另一個更新並修復了我的第一個代碼中的一個小缺陷。我已經做了一個毫秒的變量,但並沒有真正使用它。 – Matt