絕不是完美的,但我只是在這裏比賽的樂趣試圖安撫你的怪,但好奇,我需要
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
調用這個通常用命令行的工作方式是,你不想放慢輸出(尤其是如果有幾頁輸出)。相反,你會說'whatever_command> output.txt 2> errors.txt',你可以在閒暇時打開和閱讀文本文件。還是你已經嘗試過這種方法? – Teepeemm
'out-host -paging'是與「more」等效的PS應該是你想要的。按Enter鍵而不是空格,一次只能進行一行。 ['Get-History'或者只是'h'](https://technet.microsoft.com/en-us/library/hh847753.aspx)將包含命令歷史記錄以便於查看。 – Matt
嗨 - 感謝您的想法。 - 我試圖一次輸出stdout一個字符。試圖避免完整的頁面瀏覽... – Danny