今年もあと残りわずかとなってきましたが、そろそろ来年のカレンダーの購入なんて考えてる方も多いのではないでしょうか。
そこでふと思ったのは、PowerShellでカレンダーの表示はできないものか?
調べたところ、どうやらそういうコマンドレットは無いらしいです。(当たり前か)
うーん・・・、じゃあ作るか!
そんなわけで、PowerShellでカレンダー表示スクリプトを作成してみました。
#カレンダー表示スクリプト
#パラメータ
Param($year, $month)
if (($year -eq $null) -And ($month -eq $null)){
#両方nullなら今月
$y = (Get-Date).Year
$m = (Get-Date).Month
} elseif (($year -ne $null) -And ($month -ne $null)) {
#パラメータがある場合は入力値の月
$y = $year
$m = $month
} else {
#それ以外はエラー
Write-Output 'パラメータが間違っています。[年] [月]を指定してください。'
exit
}
#ついたちの曜日値を取得
$firstDayOfWeek = (Get-Date -Year $y -Month $m -Day 1).DayOfWeek.value__
#始まりの空白を設定
$startWeek = $firstDayOfWeek * 7 + 2
$space = ""
for ($j=0; $j -lt $startWeek; $j++){
$space = $space + " "
}
#その月の最終日を取得
$nextMonthDate = (Get-Date -Year $y -Month $m -Day 1).AddMonths(1)
$lastDay = (Get-Date -Year $nextMonthDate.Year -Month $nextMonthDate.Month -Day 1).AddDays(-1).day
#年月表示
Write-Host $y"年"$m"月"
#曜日の表示
Write-Host "SUN MON TUE WED THU FRI SAT"
#日付部分を作成
$weekValue = $firstDayOfWeek
$dayString = $space
for ($i=1; $i -le $lastDay; $i++){
if ($i -ge 9){
$dayString = $dayString + $i + " "
} else {
$dayString = $dayString + $i + " "
}
$weekValue = $weekValue + 1
if ($weekValue -eq 7) {
#土曜日までいったら改行
$dayString = $dayString.TrimEnd()
if ($i -lt 9){
$dayString = $dayString + "`n" + " "
} else {
$dayString = $dayString + "`n" + " "
}
$weekValue = 0
}
}
#日付の表示
Write-host $dayString.TrimEnd()
パラメータで年、月を指定すると、その年月のカレンダーが表示されます。何も指定しなければ今月のカレンダーが表示されるようにしました。
実行するとこんな感じになります。

パラメータなし。
今月のカレンダーが表示されます。

パラメータあり。
2017年1月のカレンダーが表示されています。
スポンサーリンク