PowerShell カレンダーを表示したい
PowerShellでカレンダーを表示するにはどうすればいいでしょうか。
マイクロソフトの公式ページにサンプルがあるのですがGUI表示になっていて、そうじゃぁねんだわ、みたいになったので自作しました。
日曜日は赤色、土曜日は青色表示になっています。
function Disp-Calendar($year,$month)
{
Write-Host " $($year)年 $($month)月 "
Write-Host " 日" -ForegroundColor "red" -NoNewLine
Write-Host " 月 火 水 木 金" -NoNewLine
Write-Host " 土" -ForegroundColor "blue" -NoNewLine
$Startday = New-Object DateTime $year,$month,1 # 1日
$Endday = $Startday.AddMonths(1).AddDays(-1) # 末日
# 曜日別の色設定
$fgcolor=@{[DayOfWeek]::Sunday="red";[DayOfWeek]::Saturday="blue";[DayOfWeek]::monday="White";[DayOfWeek]::Tuesday="White";[DayOfWeek]::Wednesday="White";[DayOfWeek]::Thursday="White";[DayOfWeek]::Friday="White";}
# 日曜日からスタートする
$day = $Startday
while($day.DayOfWeek -ne [DayOfWeek]::Sunday ) {
$day=$day.AddDays(-1)
}
while($day -le $Endday) {
# 日曜日判定
if($day.DayOfWeek -eq [DayOfWeek]::Sunday) {
Write-Host "" # 日曜日なら改行
}
# 日付を出力
if(($day -ge $Startday) -and ($day -le $Endday)) {
Write-Host ($day.Day.ToString().PadLeft(2)+" ") -ForegroundColor $fgcolor[$day.DayOfWeek] -NoNewLine
} else {
# 第一週の処理 日付が前月の場合は空白
Write-Host " " -NoNewline
}
$day=$day.AddDays(1)
}
Write-Host ""
}
Disp-Calendar 2024 06
Disp-Calendar 2024 05
Disp-Calendar 2024 04
Disp-Calendar 2024 03
Disp-Calendar 2024 02
Disp-Calendar 2024 01
Disp-Calendar 2023 10
処理解説
月初日と月末日を計算して、第一週目の日曜日までさかのぼります。そこから月初日まで空白を表示、月初日からは色付きで日を表示しています。連想配列で曜日別のカラーを保持しておいて、Write-hostで表示するときに色指定しています。日曜日になったら改行。
月初と月末の日付計算は過去記事「PowerShell 月末月初」を参考にしました。
文字に色を付ける記事はこちら
#PowerShell #コマンドレット #カレンダー #暦 #プログラミング学習 #プログラミング初心者 #業務効率化 #つくってみた
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?