見出し画像

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 #コマンドレット #カレンダー #暦 #プログラミング学習 #プログラミング初心者 #業務効率化 #つくってみた

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?