Categories: powershell

PowerShellで月末日を取得する方法と実用スクリプト解説

PowerShellは、Windowsのシステム管理や日常的な業務を効率化するための強力なツールです。特に日付処理は多くのスクリプトで活用され、月末日を取得する処理もそのひとつです。月末日は、帳票作成や締め処理などでよく使われる要素ですが、PowerShellでは簡潔に求めることができます。この記事では、PowerShellを使って月末日を取得する方法を、初心者にもわかりやすく解説します。あわせて、実務で役立つ応用スクリプトも紹介します。


PowerShellで月末日を取得する基本方法

PowerShellで月末日を求めるには、少し工夫が必要です。以下の方法は、現在の年月を基準にした月末日を取得する例です。

$today = Get-Date
$firstDayNextMonth = Get-Date -Year $today.Year -Month ($today.Month % 12 + 1) -Day 1
$lastDayThisMonth = $firstDayNextMonth.AddDays(-1)

$lastDayThisMonth.ToString("yyyy-MM-dd")

このスクリプトは次のような流れです:

  1. $today で現在日付を取得。
  2. $firstDayNextMonth にて、来月の1日を計算。
  3. .AddDays(-1) で1日前、すなわち今月の最終日を求めます。

この方法なら、31日、30日、28日、うるう年の29日も自動で対応できます。


特定の年月の月末日を取得する方法

任意の年月の月末日を知りたい場合も、同様の手順で取得可能です。以下は2025年6月の月末日を求めるスクリプトです。

$year = 2025
$month = 6

# 翌月の1日を求める(12月のときは翌年1月に対応)
if ($month -eq 12) {
$nextMonth = 1
$nextYear = $year + 1
} else {
$nextMonth = $month + 1
$nextYear = $year
}

$firstDayNextMonth = Get-Date -Year $nextYear -Month $nextMonth -Day 1
$lastDay = $firstDayNextMonth.AddDays(-1)

$lastDay.ToString("yyyy-MM-dd")

このスクリプトは、月末処理が必要な自動レポートやログ整理の自動化に活用できます。


月末日を使った日付判定スクリプトの応用例

業務でよくあるのが、「今日が月末かどうか判定する」処理です。以下のスクリプトで簡単に判定できます。

$today = Get-Date
$firstDayNextMonth = Get-Date -Year $today.Year -Month ($today.Month % 12 + 1) -Day 1
$lastDay = $firstDayNextMonth.AddDays(-1)

if ($today.Date -eq $lastDay.Date) {
Write-Output "今日は月末日です。"
} else {
Write-Output "今日は月末日ではありません。"
}

このようなスクリプトをタスクスケジューラで定期実行すれば、月末処理の自動化に組み込むこともできます。


月末の平日・休日を判定して処理を分ける

月末日が土日祝日にあたるかどうかで、処理日を前倒しするような業務ルールもあるでしょう。PowerShellでは以下のように判定できます(祝日は別途カレンダーと照合が必要ですが、ここでは土日のみ判定)。

$lastDay = (Get-Date -Year 2025 -Month 6 -Day 1).AddMonths(1).AddDays(-1)

switch ($lastDay.DayOfWeek) {
'Saturday' { Write-Output "月末は土曜日です。前営業日に処理してください。" }
'Sunday' { Write-Output "月末は日曜日です。前営業日に処理してください。" }
default { Write-Output "月末は平日です。" }
}

このように、業務カレンダーに応じてフロー制御を組み込むことで、実用性がさらに高まります。


月末日をファイル名やログに活用する例

月末日をファイル名に含めたい場合、以下のような処理を使うことができます。

$lastDay = (Get-Date).AddMonths(1).AddDays(-((Get-Date).Day))
$filename = "Report_" + $lastDay.ToString("yyyyMMdd") + ".csv"

Write-Output "ファイル名は $filename です。"

出力結果例:

コピーする編集するファイル名は Report_20250630.csv です。

このようにすれば、ファイルの世代管理やバックアップにも便利です。


月末日取得を関数化して再利用する

何度も同じロジックを使うなら関数化がおすすめです。

function Get-LastDayOfMonth {
param(
[int]$year = (Get-Date).Year,
[int]$month = (Get-Date).Month
)

if ($month -eq 12) {
$nextMonth = 1
$nextYear = $year + 1
} else {
$nextMonth = $month + 1
$nextYear = $year
}

$firstDayNextMonth = Get-Date -Year $nextYear -Month $nextMonth -Day 1
return $firstDayNextMonth.AddDays(-1)
}

# 使用例
$lastDay = Get-LastDayOfMonth -year 2025 -month 6
Write-Output "2025年6月の月末日は $($lastDay.ToString('yyyy-MM-dd')) です。"

このように関数化することで、スクリプト全体の可読性と再利用性が向上します。


まとめ

PowerShellで月末日を取得する処理は、基本的な日付関数を活用することで柔軟に実現できます。システム運用やレポート作成、自動バックアップなど、あらゆる場面で役立つため、ぜひ自分の環境や業務にあった形で取り入れてみてください。

再利用性を意識して関数化しておくと、長期的な運用においても効率的です。PowerShellのスクリプトを活用して、日付処理をもっとスマートにしていきましょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。