Public/console/art/Write-Marquee.ps1
function Write-Marquee { #.DESCRIPTION # Writes text as marquee # .PARAMETER text # Specifies the text to write # .PARAMETER speed # Specifies the marquee speed (60 ms per default) # .EXAMPLE # PS> Write-Marquee "Hello_World" [CmdletBinding()] param ( [string]$text = "PowerShell is powerful! PowerShell is cross-platform! PowerShell is open-source! PowerShell is easy to learn! Powershell is fully documented", [int]$Count = 12, [int]$speed = 60 ) begin { $IAP = $InformationPreference; $InformationPreference = 'Continue' [int]$SepLength = 3 $o = [string][char]124 $spc = [string][char]0x20 $sep = [string][char]43 * $SepLength } process { try { $looptxt = $($spc * 84) + $(((1..$Count | ForEach-Object { $sep + $spc + $text }) -join $spc) + $spc + $sep) + $($spc * 84) [int]$Length = $looptxt.Length [int]$Start = 1 [int]$End = $($Length - 80) Clear-Host $cnvs = ($o + ([string][char]32 * 82) + $o) $line = ([char]45).ToString() * 84 Write-Output $line; $StartPosition = $Host.UI.RawUI.CursorPosition; $StartPosition.X = 2 Write-Output $cnvs Write-Output $line foreach ($Pos in $Start .. $End) { $Host.UI.RawUI.CursorPosition = $StartPosition $TextToDisplay = $text.Substring($Pos, 80) Write-Host -NoNewline $TextToDisplay Start-Sleep -Milliseconds $speed } Write-Output ([Environment]::NewLine) } catch { $null } } end { $InformationPreference = $IAP Write-Output ([Environment]::NewLine) } } |