public/Get-HoHoHo.ps1
function Get-HoHoHo { [CmdletBinding()] param () if (!$IsWindows) { Write-Warning "This script is designed to run on Windows only." break } Write-Host "If you don't believe in Christmas, just go with it." function Write-ProperCounter { param ( [parameter(Mandatory = $True)] [ValidateRange(1, 12)] [int] $Number ) if ($Number -gt 3) { return $([string]$Number + 'th') } else { switch ($Number) { 1 { return '1st'; break; } 2 { return '2nd'; break; } 3 { return '3rd'; break; } } } } $gifts = ( 'a partridge in a Pear tree', 'Turtle doves, and', 'French hens', 'Colly birds', 'gold rings', 'geese a-laying', 'swans a-swimming', 'maids a-milking', 'ladies dancing', 'lords a-leaping', 'pipers piping', 'drummers drumming' ) # the sleigh ride... Add-Type -AssemblyName System.Speech $Speak = New-Object System.Speech.Synthesis.SpeechSynthesizer for ($i = 0; $i -lt $gifts.Count; $i++) { Write-Host "On the $(Write-ProperCounter $($i + 1)) day of Christmas, my true love gave to me:" $speak.speak(“On the $(Write-ProperCounter $($i + 1)) day of Christmas, my true love gave to me,”) $mygifts = [string[]]$gifts[0..$i] [array]::Reverse($mygifts) $x = $i + 1 foreach ($gift in $mygifts) { if ($x -eq 1) { $thisGift = $gift } else { $thisGift = "$x $gift" } Write-Host "...$thisGift" $Speak.Speak($thisGift) $x-- } } } |