見出し画像

PowerShell カレンダーを表示したい(改良)

前回、カレンダーを表示する記事を書きました。
指定の日付に色をつけるように改良してみました。



関数Disp-Calendar2の引数に「年、月、色を付けたい日の始まり、日の終わり」を指定すると指定日に色がついたカレンダーが表示されます。

コードはこちら


function Disp-Calendar2($year,$month,$select_startday=-1,$select_endday=-1)
{
  if($select_endday -eq -1){
    $select_endday = $select_startday
  }

  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)) {
      if(($day.Day -ge $select_startday) -and ($day.Day -le $select_endday)) {
        Write-Host ($day.Day.ToString().PadLeft(2)+" ") -ForegroundColor $fgcolor[$day.DayOfWeek]  -BackgroundColor "Green" -NoNewLine
      } else {
        Write-Host ($day.Day.ToString().PadLeft(2)+" ") -ForegroundColor $fgcolor[$day.DayOfWeek] -NoNewLine
      }

    } else { 
      # 第一週の処理 日付が前月の場合は空白
      Write-Host "   " -NoNewline 
    }

    $day=$day.AddDays(1)
  }
  Write-Host ""
}

Disp-Calendar2 2024 06 10 15
Disp-Calendar2 2024 05 16 16




前回記事はこちら

文字に色を付けるのはこちら


#PowerShell #コマンドレット #カレンダー #暦 #プログラミング学習 #プログラミング初心者 #業務効率化 #つくってみた


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

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