# encoding: ascii
# api: powershell
# title: Get-Calendar
# description: Prints calendar for specified month of year. Please, let me know about bugs.
# version: 0.1
# type: function
# author: greg zakharov
# license: CC0
# function: Get-Calendar
# x-poshcode-id: 4524
# x-archived: 2013-10-21T08:11:14
# x-published: 2013-10-16T16:43:00
#
#
Set-Alias cal Get-Calendar
function Get-Calendar {
<#
.LINK
Follow me on twitter @gregzakharov
http://msdn.microsoft.com/en-us/library/System.Globalization.aspx
Get-Date
#>
param(
[Parameter(Mandatory=$false,
Position=0,
ValueFromPipeline=$true)]
[ValidateRange(1,12)]
[Int32]$Month = (Get-Date -u %m),
[Parameter(Mandatory=$false,
Position=1,
ValueFromPipeline=$true)]
[ValidateScript({$_ -ge 2000})]
[Int32]$Year = (Get-Date -u %Y)
)
begin {
$arr = @()
$cal = [Globalization.CultureInfo]::CurrentCulture.Calendar
$dow = [Int32]$cal.GetDayOfWeek([DateTime]([String]$Month + ".1." + [String]$Year))
}
process {
if ($dow -ne 0) {for ($i = 0; $i -lt $dow; $i++) {$arr += ' '}}
1..$cal.GetDaysInMonth($Year, $Month) | % {
if ($_.ToString().Length -eq "1") {$arr += ' ' + [String]$_}
else {$arr += [String]$_}
}
}
end {
Write-Host Su Mo Tu We Th Fr Sa -for cyan
for ($i = 0; $i -lt $arr.Length; $i+=6) {
Write-Host $arr[$i..($i + 6)]
$i++
}
Write-Host
}
}